@CookieValue解密,确实很好用啊

路人甲Java

共 4316字,需浏览 9分钟

 ·

2021-12-25 20:05

优质项目源码推荐

  1. SpringBoot + Vue + MyBatis 音乐网站项目
  2. 【超高颜值】一款高颜值的 SpringBoot+JPA 博客项目
  3. 推荐一款 SpringBoot 私活脚手架,开发效率可提高 70%
  4. Java 私活神器,一套 SpringBoot+Vue 通用的后台管理系统
  5. SpringCloud 网上商城系统(附源码及教程)

大家好,我是路人,这是 SpringMVC 系列第 26 篇。

当我们在接口中想获取 cookie 值的时候,怎么写代码更简单呢?

此时可以使用 SpringMVC 中的@CookieValue 注解来标注参数,下面来看具体的用法。

1、预备知识

  1. 接口测试利器 HTTP Client
  2. 参数解析器 HandlerMethodArgumentResolver 解密

2、@CookieValue

  • 该注释指示应将方法参数绑定到 HTTP cookie。

  • 方法参数可以声明为javax.servlet.http.Cookie类型,也可以声明为 Cookie 值类型(String、int 等)。

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CookieValue {

 /**
  * cookie名称
  */

 @AliasFor("name")
 String value() default "";

 /**
  * 同value属性
  */

 @AliasFor("value")
 String name() default "";

 /**
  * 是否需要cookie。
  * 默认值为true,如果请求中缺少cookie,则会引发异常。
  * 如果请求中不存在cookie,则希望使用空值,请将此选项切换为false。
  * 或者,提供一个默认值defaultValue,它隐式地将此标志设置为false。
  */

 boolean required() default true;

 /**
  * 默认值
  */

 String defaultValue() default ValueConstants.DEFAULT_NONE;

}

3、2 种用法

  • 用法 1:参数类型为非javax.servlet.http.Cookie类型,比如(String、int 等类型)
  • 用法 2:参数类型为javax.servlet.http.Cookie类型

4、案例代码

package com.javacode2018.springmvc.chat18.controller;

import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import java.util.LinkedHashMap;
import java.util.Map;

@RestController
public class CookieValueController {

    @RequestMapping("/cookievalue/test1")
    public Map test1(@CookieValue("name") String name,
                                     @CookieValue("age") int age) 
{
        Map result = new LinkedHashMap<>();
        result.put("name", name);
        result.put("age", age);
        return result;
    }

    /**
     * @param nameCookie
     * @param ageCookie
     * @return
     */

    @RequestMapping("/cookievalue/test2")
    public Map test2(@CookieValue("name") Cookie nameCookie,
                                     @CookieValue("age") Cookie ageCookie) 
{
        Map result = new LinkedHashMap<>();
        result.put("nameCookie", nameCookie);
        result.put("ageCookie", ageCookie);
        return result;
    }

}

测试用例代码

###
POST http://localhost:8080/chat18/cookievalue/test1
Cookie: name=java; age=26


###
POST http://localhost:8080/chat18/cookievalue/test2
Cookie: name=java; age=26

运行 2 个用例

用例 1 输出

{
  "name""java",
  "age"26
}

用例 2 输出

{
  "nameCookie": {
    "name""name",
    "value""java",
    "version"0,
    "comment"null,
    "domain"null,
    "maxAge"-1,
    "path"null,
    "secure"false,
    "httpOnly"false
  },
  "ageCookie": {
    "name""age",
    "value""26",
    "version"0,
    "comment"null,
    "domain"null,
    "maxAge"-1,
    "path"null,
    "secure"false,
    "httpOnly"false
  }
}

5、@CookieValue 原理

@CookieValue标注的参数的值来源于org.springframework.web.servlet.mvc.method.annotation.ServletCookieValueMethodArgumentResolver解析器

6、代码位置及说明

6.1、git 地址

https://gitee.com/javacode2018/springmvc-series

6.2、本文案例代码结构说明

7、SpringMVC 系列目录

  1. SpringMVC 系列第 1 篇:helloword
  2. SpringMVC 系列第 2 篇:@Controller、@RequestMapping
  3. SpringMVC 系列第 3 篇:异常高效的一款接口测试利器
  4. SpringMVC 系列第 4 篇:controller 常见的接收参数的方式
  5. SpringMVC 系列第 5 篇:@RequestBody 大解密,说点你不知道的
  6. SpringMVC 系列第 6 篇:上传文件的 4 种方式,你都会么?
  7. SpringMVC 系列第 7 篇:SpringMVC 返回视图常见的 5 种方式,你会几种?
  8. SpringMVC 系列第 8 篇:返回 json & 通用返回值设计
  9. SpringMVC 系列第 9 篇:SpringMVC 返回 null 是什么意思?
  10. SpringMVC 系列第 10 篇:异步处理
  11. SpringMVC 系列第 11 篇:集成静态资源
  12. SpringMVC 系列第 12 篇:拦截器
  13. SpringMVC 系列第 13 篇:统一异常处理
  14. SpringMVC 系列第 14 篇:实战篇:通用返回值 & 异常处理设计
  15. SpringMVC 系列第 15 篇:全注解的方式  &  原理解析
  16. SpringMVC 系列第 16 篇:通过源码解析 SpringMVC 处理请求的流程
  17. SpringMVC 系列第 17 篇:源码解析 SpringMVC 容器的启动过程
  18. SpringMVC 系列第 18 篇:强大的 RequestBodyAdvice 解密
  19. SpringMVC 系列第 19 篇:强大的 ResponseBodyAdvice 解密
  20. SpringMVC 系列第 20 篇:RestFull 详解
  21. SpringMVC 系列第 21 篇:接口调用过利器 RestTemplate
  22. SpringMVC 系列第 22 篇:参数解析器 HandlerMethodArgumentResolver 解密
  23. SpringMVC 系列第 23 篇:@RequestParam 用法及原理详解
  24. SpringMVC 系列第 24 篇:@RequestBody 用法及原理详解
  25. SpringMVC 系列第 25 篇:@RequestHeader 用法及原理详解

8、更多系列文章

  1. Spring 高手系列(共 56 篇)
  2. Java 高并发系列(共 34 篇)
  3. MySql 高手系列(共 27 篇)
  4. Maven 高手系列(共 10 篇)
  5. Mybatis 系列(共 12 篇)
  6. 聊聊 db 和缓存一致性常见的实现方式
  7. 接口幂等性这么重要,它是什么?怎么实现?
  8. 泛型,有点难度,会让很多人懵逼,那是因为你没有看这篇文章!

9、最新资料

  1. 尚硅谷 Java 学科全套教程(总 207.77GB)
  2. 2021 最新版 Java 微服务学习线路图 + 视频
  3. 阿里技术大佬整理的《Spring 学习笔记.pdf》
  4. 阿里大佬的《MySQL 学习笔记高清.pdf》
  5. 2021 版 java 高并发常见面试题汇总.pdf
  6. Idea 快捷键大全.pdf
浏览 33
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报