@RequestHeader
用于将Web请求头中的数据映射到控制器处理方法的参数中。
注解解析
① 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
③ required
:
请求头中是否必须包含指定的值,默认值为true
。
required
为true
时,如果请求头中缺少指定的值,则会抛出异常。
required
为false
时,如果请求头中缺少指定的值,则会返回null
。
④ defaultValue
:
请求头变量绑定失败时的默认值,指定默认值后,会隐式的将required
设置为false
。
注解示例
1) 建Controller
,用来演示@RequestHeader
使用方法。
package com.arhorchin.securitit.webannotations;
import java.util.Map;
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.RequestHeader;
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.alibaba.fastjson.JSON;
/**
* @author Securitit.
* @note 演示@RequestHeader使用方法.
*/
@Controller
@RequestMapping("/WebAnnotations")
public class RequestHeaderController {
/**
* logger.
*/
private Logger logger = LoggerFactory.getLogger(RequestHeaderController.class);
/**
* 跳转页面.
*/
@RequestMapping(
value = "/RequestHeader.html",
method = RequestMethod.GET)
public ModelAndView requestHeaderHtml(HttpServletRequest req, HttpServletResponse res, ModelMap modelMap)
throws Exception {
return new ModelAndView("webannotations/RequestHeader", modelMap);
}
/**
* 从请求头以Map解析方法参数.
*/
@ResponseBody
@RequestMapping(
value = "/RequestHeaderMap.do",
method = RequestMethod.GET)
public String requestHeaderMap(@RequestHeader Map<String, String> requestHeaderMap) throws Exception {
logger.info("Current value of RequestHeader is " + JSON.toJSONString(requestHeaderMap));
return "Current value of RequestHeader is " + JSON.toJSONString(requestHeaderMap);
}
/**
* 从请求头以单键值形式解析方法参数.
*/
@ResponseBody
@RequestMapping(
value = "/RequestHeaderSingle.do",
method = RequestMethod.GET)
public String requestHeaderSingle(@RequestHeader(
value = "Host") String requestHeaderHost) throws Exception {
logger.info("Current value of RequestHeader [Host] is " + requestHeaderHost);
return "Current value of RequestHeader [Host] is " + requestHeaderHost;
}
/**
* 从请求头以单键值形式解析方法参数.
*/
@ResponseBody
@RequestMapping(
value = "/RequestHeaderSingleRequiredTrue.do",
method = RequestMethod.GET)
public String requestHeaderSingleRequiredTrue(@RequestHeader(
value = "Tmp-Header",
required = true) String requestHeaderTmpHeader) throws Exception {
logger.info("Current value of RequestHeader [Tmp-Header] is " + requestHeaderTmpHeader);
return "Current value of RequestHeader [Tmp-Header] is " + requestHeaderTmpHeader;
}
/**
* 从请求头以单键值形式解析方法参数.
*/
@ResponseBody
@RequestMapping(
value = "/RequestHeaderSingleRequiredFalse.do",
method = RequestMethod.GET)
public String requestHeaderSingleRequiredFalse(@RequestHeader(
value = "Tmp-Header",
required = false) String requestHeaderTmpHeader) throws Exception {
logger.info("Current value of RequestHeader [Tmp-Header] is " + requestHeaderTmpHeader);
return "Current value of RequestHeader [Tmp-Header] is " + requestHeaderTmpHeader;
}
}
2) 建html
,用来演示RequestHeaderController
示例。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Author" content="Securitit">
<meta name="Keywords" content="-">
<meta name="Description" content="Securitit @RequestHeader 测试页面">
<title>@RequestHeader 测试页面</title>
</head>
<body>
<a href="http://localhost:9199/spring-annotations/WebAnnotations/RequestHeaderMap.do" target="_blank">点击链接,@RequestHeader进行参数绑定,后端以Map解析方法参数.</a>
<br />
<br />
<a href="http://localhost:9199/spring-annotations/WebAnnotations/RequestHeaderSingle.do" target="_blank">点击链接,@RequestHeader进行参数绑定,以单键值形式解析方法参数.</a>
<br />
<br />
<a href="http://localhost:9199/spring-annotations/WebAnnotations/RequestHeaderSingleRequiredTrue.do" target="_blank">点击链接,@RequestHeader进行参数绑定,后端指定required=true,以单键值形式解析方法参数.</a>
<br />
<br />
<a href="http://localhost:9199/spring-annotations/WebAnnotations/RequestHeaderSingleRequiredFalse.do" target="_blank">点击链接,@RequestHeader进行参数绑定,后端指定required=true,以单键值形式解析方法参数.</a>
</body>
</html>
3) 启动服务,访问http://localhost:9199/spring-annotations/WebAnnotations/RequestHeader.html
页面。
分别点击页面中的链接,查看@RequestHeader
对应的效果。
① 点击链接,@RequestHeader进行参数绑定,后端以Map解析方法参数.
② 点击链接,@RequestHeader进行参数绑定,以单键值形式解析方法参数.
③ 点击链接,@RequestHeader进行参数绑定,后端指定required=true,以单键值形式解析方法参数.
④ 点击链接,@RequestHeader进行参数绑定,后端指定required=true,以单键值形式解析方法参数.
总结
@RequestHeader
注解在实际应用中,作用还是很大的,尤其是现在前后端分离的应用较大,通过其可以获取前端传入的头信息。
若文中存在错误和不足,欢迎指正!