Java充电社
专辑
博文
联系我
本人继续续收门徒,亲手指导
SpringMVC教程
-> @CookieValue详解
1、Helloword
2、@Controller、@RequestMapping
3、接口测试利器
4、如何接受请求中的参数?
5、@RequestBody接收Json格式数据
6、多文件上传
7、返回页面常见的5种方式
8、返回json格式数据 & 通用返回值设计
9、SpringMVC返回null是什么意思?
10、异步处理请求
11、如何集成静态资源?
12、拦截器怎么用?
13、统一异常处理
14、实战篇:通用返回值 & 异常处理设计
15、全注解的方式 & 原理解析
16、源码解析SpringMVC处理请求的流程
17、源码解析SpringMVC容器的启动过程
18、RequestBodyAdvice:对@ReuqestBody进行增强
19、ResponseBodyAdvice:对@ResponseBody进行增强
20、RESTful接口详解
21、接口调用利器RestTemplate
22、参数解析器HandlerMethodArgumentResolver解密
23、@RequestParam用法及原理详解
24、@RequestBody原理解密
25、@RequestHeader详解
26、@CookieValue详解
27、@RequestAttribute详解
28、@SessionAttribute详解
29、重定向和转向详解
30、Converter转换器详解
31、跨域问题详解
32、类容协商,颠覆你的认知
33、终章
34、CORS通信
35、浏览器安全策略 & CORS
36、Http中的Content-Type详解
上一篇:@RequestHeader详解
下一篇:@RequestAttribute详解
<div style="display:none"></div> **大家好,我是路人,这是SpringMVC系列第26篇。** 当我们在接口中想获取cookie值的时候,怎么写代码更简单呢? 此时可以使用SpringMVC中的@CookieValue注解来标注参数,下面来看具体的用法。 ## 1、预备知识 1. <a href="https://mp.weixin.qq.com/s/83zvde-O5PlI9Vd2nP_PZQ" target="_blank">接口测试利器 HTTP Client</a> 2. <a href="https://mp.weixin.qq.com/s/XQ1K4eXtGvfG_0RReFVg8Q" target="_blank">参数解析器HandlerMethodArgumentResolver解密</a> ## 2、@CookieValue - 该注释指示应将方法参数绑定到HTTP cookie。 - 方法参数可以声明为`javax.servlet.http.Cookie`类型,也可以声明为Cookie值类型(String、int等)。 ```java @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、案例代码 ```java 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<String, Object> test1(@CookieValue("name") String name, @CookieValue("age") int age) { Map<String, Object> result = new LinkedHashMap<>(); result.put("name", name); result.put("age", age); return result; } /** * @param nameCookie * @param ageCookie * @return */ @RequestMapping("/cookievalue/test2") public Map<String, Object> test2(@CookieValue("name") Cookie nameCookie, @CookieValue("age") Cookie ageCookie) { Map<String, Object> result = new LinkedHashMap<>(); result.put("nameCookie", nameCookie); result.put("ageCookie", ageCookie); return result; } } ``` 测试用例代码 ```java ### 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输出 ```json { "name": "java", "age": 26 } ``` 用例2输出 ```json { "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`解析器 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/237/ebe44680-2127-4637-baaf-09f7e5f79141.png) ## 6、代码位置及说明 ### 6.1、git地址 ```html https://gitee.com/javacode2018/springmvc-series ``` ### 6.2、本文案例代码结构说明 ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/237/fd3db07c-f80c-4504-9353-2e3e3211b972.png) <a style="display:none" target="_blank" href="https://mp.weixin.qq.com/s/_S1DD2JADnXvpexxaBwLLg" style="color:red; font-size:20px; font-weight:bold">继续收门徒,亲手带,月薪 4W 以下的可以来找我</a> ## 最新资料 1. <a href="https://mp.weixin.qq.com/s?__biz=MzkzOTI3Nzc0Mg==&mid=2247484964&idx=2&sn=c81bce2f26015ee0f9632ddc6c67df03&scene=21#wechat_redirect" target="_blank">尚硅谷 Java 学科全套教程(总 207.77GB)</a> 2. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484192&idx=1&sn=505f2faaa4cc911f553850667749bcbb&scene=21#wechat_redirect" target="_blank">2021 最新版 Java 微服务学习线路图 + 视频</a> 3. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484573&idx=1&sn=7f3d83892186c16c57bc0b99f03f1ffd&scene=21#wechat_redirect" target="_blank">阿里技术大佬整理的《Spring 学习笔记.pdf》</a> 4. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247484544&idx=2&sn=c1dfe907cfaa5b9ae8e66fc247ccbe84&scene=21#wechat_redirect" target="_blank">阿里大佬的《MySQL 学习笔记高清.pdf》</a> 5. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485167&idx=1&sn=48d75c8e93e748235a3547f34921dfb7&scene=21#wechat_redirect" target="_blank">2021 版 java 高并发常见面试题汇总.pdf</a> 6. <a href="https://mp.weixin.qq.com/s?__biz=MzkwOTAyMTY2NA==&mid=2247485664&idx=1&sn=435f9f515a8f881642820d7790ad20ce&scene=21#wechat_redirect" target="_blank">Idea 快捷键大全.pdf</a> ![](https://itsoku.oss-cn-hangzhou.aliyuncs.com/itsoku/blog/article/1/2883e86e-3eff-404a-8943-0066e5e2b454.png)
#custom-toc-container