从@RequestHeader和HttpServletRequest获取标头

时间:2016-11-20 17:52:29

标签: spring spring-mvc

@RequestHeader注释与HttpServletRequest的读取标题数据之间的区别是什么?

2 个答案:

答案 0 :(得分:3)

使用Spring @RequestHeader的优点是它会自动抛出异常 HTTP状态400 - 如果未在输入请求中发送标头(通过设置required=true),则缺少类型的方法参数的请求标头“X”。示例用法如下所示:

@RequestMapping(method=RequestMethod.GET)
public String users(@RequestHeader(required=true)String myHeader, Model model) {
    //your Code
}

如果您使用@RequestHeader,也可以设置标题的默认值,您可以参考here

我们需要手动检查标头值!=null的条件,抛出异常或设置默认值,如果您使用HttpServletRequest,这将使您的代码变得冗长。

答案 1 :(得分:2)

性能没有区别。使用@RequestHeaderHttpServletRequest.getHeader()更方便。

这类似于@RequestParamHttpServletRequest.getParameter()

Spring完成了将请求Headers,Parameters转换为方法参数的工作,以便您可以避免使用样板代码。

有一个名为MethodArgumentResolver的Spring RequestHeaderMethodArgumentResolver实际上使用HttpServletRequest.getHeader()来获取标题。