@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;
}
- logger.
}
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框架取值,可以帮助我们更快更好的完成任务。