这一部分的示例见这个项目的 mvc 分支下的 CookieAndHeaderController.java
① 用@CookieValue
注解映射 cookie 值
注解@CookieValue
允许一个方法参数允许把一个方法参数绑定到一个 HTTP cookie 值上。我们来考虑下下面的一个从 HTTP 请求中接受到的 cookie:
JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
下面的代码示例演示了怎样获取 JSESSIONID cookie 的值:
/**
* 使用@CookieValue获取cookie值
*/
@RequestMapping("/jSessionId")
public String cookie(@CookieValue("JSESSIONID") String jSessionId, Model model)
{
model.addAttribute("sth", jSessionId);
return "/examples/targets/test1";
}
如果目标方法参数不是字符串,那么就会自动进行类型转换。见“方法参数和类型转换”一节。
这个注解支持 Servlet 和 Portlet 环境中的处理方法。
② 用@RequestHeader
映射请求头属性
注解@RequestHeader
允许把一个请求头绑定到方法参数上。下面是一个请求头示例:
Host localhost:8080
Accept text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding gzip,deflate
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
下面的示例演示了怎样获取请求头 Accept-Encoding 和 Keep-Alive 的值:
@RequestMapping("/displayHeaderInfo.do")
public void displayHeaderInfo(
@RequestHeader("Accept-Encoding") String encoding,
@RequestHeader("Keep-Alive") long keepAlive)
{
//...
}
如果目标方法参数不是字符串,那么就会自动进行类型转换。见“方法参数和类型转换”一节。
当注解@RequestHeader
用在一个Map<String, String>
、MultiValueMap<String, String>
或者HttpHeaders
参数上的时候,这个 map 就是收集所有请求头的值。
注意:内建的类型转换支持,可以把一个用逗号隔开的字符串,转换为一个字符串或者其他类型的数组或者容器(collection)。例如,一个带有@RequestHeader("Accept")
的方法参数可以是一个字符串,也可以是一个String[]
或者List<String>
。
这个注解支持 Servlet 和 Portlet 环境中的处理方法。