Spring 注解面面通 之 @CookieValue

272次阅读
没有评论

 @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
 
评论(没有评论)