Spring 注解面面通 之 @CookieValue

975次阅读
没有评论

 @CookieValue用于将请求的Cookie数据映射到控制器处理方法的参数中。

  注解解析

  ① value:

    绑定的参数名称,参数值为String类型。

  ② name:

    绑定的参数名称,参数值为String类型。name和value可以同时使用,但两者的值需一致,否则会出现错误。

attribute ‘name’ and its alias ‘value’ are present with values of [XXX] and [XXX], but only one is permitted
1
  ③ required:

    Cookie中是否必须包含指定的值,默认值为true.

    required为true时,如果Cookie中缺少指定的值,则会抛出异常.

    required为false时,如果Cookie中缺少指定的值,则会返回null.

  ④ defaultValue:

    用作绑定失败时的默认值,若Cookie中缺少指定的值,使用此值作为默认值.

    设置defaultValue时,会将required隐式的设置为false.

  注解示例

  1) 建Controller,用来演示@CookieValue使用方法。

package com.arhorchin.securitit.webannotations;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.arhorchin.securitit.extend.initializer.CustomerApplicationContextInitializer;

/**

  • @author Securitit.
  • @note 演示@CookieValue使用方法.
    */
    @Controller
    @RequestMapping(“/WebAnnotations”)
    public class CookieValueController { /**
    • logger.
      */
      private Logger logger = LoggerFactory.getLogger(CustomerApplicationContextInitializer.class);

    /**

    • 跳转页面.
      */
      @RequestMapping(
      value = “/CookieValue.html”,
      method = RequestMethod.GET)
      public ModelAndView cookieValueHtml(HttpServletRequest req, HttpServletResponse res, ModelMap modelMap)
      throws Exception {
      req.getSession(true);
      return new ModelAndView(“webannotations/CookieValue”, modelMap);
      }

    /**

    • 从Cookie中获取JSESSIONID.
      */
      @ResponseBody
      @RequestMapping(
      value = “/CookieValue.do”,
      method = RequestMethod.GET)
      public String CookieValue(@CookieValue(
      value = “JSESSIONID”) String jsessionId) throws Exception {
      logger.info(“Current JSESSIONID is ” + jsessionId);
      return “Current JSESSIONID is ” + jsessionId;
      }

    /**

    • 从Cookie中获取DEFSESSIONID,DEFSESSIONID在Cookie中不存在,
    • 由于required设置为true,此时会抛出异常.
      */
      @ResponseBody
      @RequestMapping(
      value = “/CookieValueRequiredTrue.do”,
      method = RequestMethod.GET)
      public String CookieValueRequiredTrue(@CookieValue(
      value = “DEFSESSIONID”,
      required = true) String jsessionId) throws Exception {
      logger.info(“Current DEFSESSIONID is ” + jsessionId);
      return “Current DEFSESSIONID is ” + jsessionId;
      }

    /**

    • 从Cookie中获取DEFSESSIONID,DEFSESSIONID在Cookie中不存在,
    • 由于required设置为false,此时返回null.
      */
      @ResponseBody
      @RequestMapping(
      value = “/CookieValueRequiredFalse.do”,
      method = RequestMethod.GET)
      public String CookieValueRequiredFalse(@CookieValue(
      value = “DEFSESSIONID”,
      required = false) String jsessionId) throws Exception {
      logger.info(“Current DEFSESSIONID is ” + jsessionId);
      return “Current DEFSESSIONID is ” + jsessionId;
      }

    /**

    • 从Cookie中获取DEFSESSIONID,DEFSESSIONID在Cookie中不存在,
    • 由于设置了defaultValue,required隐式的设置为false,则返回默认值.
      */
      @ResponseBody
      @RequestMapping(
      value = “/CookieValueDefault.do”,
      method = RequestMethod.GET)
      public String cookieValueDefaultRequiredTest(@CookieValue(
      value = “DEFSESSIONID”,
      defaultValue = “Securitit’s CookieValue Test.”) String jsessionId) throws Exception {
      logger.info(“Current DEFSESSIONID is ” + jsessionId);
      return “Current DEFSESSIONID is ” + jsessionId;
      }

}

  2) 建html,用来演示CookieValueController示例。

@CookieValue 测试页面 点击链接,获取Cookie中的JSESSIONID.

点击链接,@CookieValue的required属性为true,抛出异常.

点击链接,@CookieValue的required属性为false,返回null.

点击链接,@CookieValue的defaultValue属性设置默认值,required隐式的设置为false.

  3) 启动服务,访问http://localhost:9199/spring-annotations/WebAnnotations/CookieValue.html页面。

  分别点击页面中的链接,查看@CookieValue对应的效果。

  ① 点击链接,获取Cookie中的JSESSIONID.

  ② 点击链接,@CookieValue的required属性为true,抛出异常.

  ③ 点击链接,@CookieValue的required属性为false,返回null.

  ④ 点击链接,@CookieValue的defaultValue属性设置默认值,required隐式的设置为false.

  总结

  @CookieValue注解在实际应用中,作用还是很大的,传统Web开发中,Cookie是不可绕过的一环,掌握如何快速的通过Spring框架取值,可以帮助我们更快更好的完成任务。

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)

文心AIGC

2024 年 6 月
 12
3456789
10111213141516
17181920212223
24252627282930
文心AIGC
文心AIGC
人工智能ChatGPT,AIGC指利用人工智能技术来生成内容,其中包括文字、语音、代码、图像、视频、机器人动作等等。被认为是继PGC、UGC之后的新型内容创作方式。AIGC作为元宇宙的新方向,近几年迭代速度呈现指数级爆发,谷歌、Meta、百度等平台型巨头持续布局
文章搜索
热门文章
潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026

潞晨尤洋:日常办公没必要上私有模型,这三类企业才需要 | MEET2026 Jay 2025-12-22 09...
面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25

面向「空天具身智能」,北航团队提出星座规划新基准丨NeurIPS’25 鹭羽 2025-12-13 22:37...
5天连更5次,可灵AI年末“狂飙式”升级

5天连更5次,可灵AI年末“狂飙式”升级

5天连更5次,可灵AI年末“狂飙式”升级 思邈 2025-12-10 14:28:37 来源:量子位 让更大规...
钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议

钉钉又发新版本!把 AI 搬进每一次对话和会议 梦晨 2025-12-11 15:33:51 来源:量子位 A...
商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1

商汤Seko2.0重磅发布,合作短剧登顶抖音AI短剧榜No.1 十三 2025-12-15 14:13:14 ...
最新评论
ufabet ufabet มีเกมให้เลือกเล่นมากมาย: เกมเดิมพันหลากหลาย ครบทุกค่ายดัง
tornado crypto mixer tornado crypto mixer Discover the power of privacy with TornadoCash! Learn how this decentralized mixer ensures your transactions remain confidential.
ดูบอลสด ดูบอลสด Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Pretty! This has been a really wonderful post. Many thanks for providing these details.
ดูบอลสด ดูบอลสด Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
Obrazy Sztuka Nowoczesna Obrazy Sztuka Nowoczesna Thank you for this wonderful contribution to the topic. Your ability to explain complex ideas simply is admirable.
ufabet ufabet Hi there to all, for the reason that I am genuinely keen of reading this website’s post to be updated on a regular basis. It carries pleasant stuff.
ufabet ufabet You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!
ufabet ufabet Very well presented. Every quote was awesome and thanks for sharing the content. Keep sharing and keep motivating others.
热评文章
读懂2025中国AI走向!公司×产品×人物×方案,最值得关注的都在这里了

读懂2025中国AI走向!公司×产品×人物×方案,最值得关注的都在这里了

读懂2025中国AI走向!公司×产品×人物×方案,最值得关注的都在这里了 衡宇 2025-12-10 12:3...
5天连更5次,可灵AI年末“狂飙式”升级

5天连更5次,可灵AI年末“狂飙式”升级

5天连更5次,可灵AI年末“狂飙式”升级 思邈 2025-12-10 14:28:37 来源:量子位 让更大规...
戴尔 x OpenCSG,推出⾯向智能初创企业的⼀体化 IT 基础架构解决方案

戴尔 x OpenCSG,推出⾯向智能初创企业的⼀体化 IT 基础架构解决方案

戴尔 x OpenCSG,推出⾯向智能初创企业的⼀体化 IT 基础架构解决方案 十三 2025-12-10 1...
九章云极独揽量子位三项大奖:以“一度算力”重构AI基础设施云格局

九章云极独揽量子位三项大奖:以“一度算力”重构AI基础设施云格局

九章云极独揽量子位三项大奖:以“一度算力”重构AI基础设施云格局 量子位的朋友们 2025-12-10 18:...
乐奇Rokid这一年,一路狂飙不回头

乐奇Rokid这一年,一路狂飙不回头

乐奇Rokid这一年,一路狂飙不回头 梦瑶 2025-12-10 20:41:15 来源:量子位 梦瑶 发自 ...