春季-将HttpHeaders与@RequestHeaders

时间:2019-01-25 22:31:07

标签: java spring http-headers

我不熟悉spring,但是我遇到了这个问题,我在org.springframework.web.method.annotation.RequestHeaderMapMethodArgumentResolver.resolveArgument(RequestHeaderMapMethodArgumentResolver.java:72)遇到了nullpointerexception

我能够随机找出是由@RequestHeader注释引起的问题,但无法弄清楚原因。奇怪的是,返回的HttpHeaders对象甚至都没有在函数中使用。我进行了快速搜索,但无法真正找到此注释对于该功能是否必要。这是处理有此问题的请求的原始代码

@RequestMapping(value = "/webforms/index.html", method = RequestMethod.GET)
public ModelAndView prepareView(HttpServletRequest request, @RequestParam(value="signoffId", required=false) Integer signoffId, @RequestHeader HttpHeaders headers) {
    clearErrorsForNewRequest(request);
    return prepareView(request, VIEW, signoffId);
}

我试图这样使用@RequestHeaders而不使用HttpHeaders

@RequestMapping(value = "/webforms/index.html", method = RequestMethod.GET)
public ModelAndView prepareView(HttpServletRequest request, @RequestParam(value="signoffId", required=false) Integer signoffId, @RequestHeader String host) {
    clearErrorsForNewRequest(request);
    return prepareView(request, VIEW, signoffId);
}

,我不再遇到这个异常。这里发生了什么?发出请求时,我可以清楚地看到http标头,为什么我在Spring中得到此异常?可以使用HttpHeaders对象的请求类型有什么限制?

请参阅以下有关我的请求标头的外观:

This is what my request header for the request looks like

这似乎是我从反编译器中检索到的有问题的部分,但在第72行抛出了异常。看来nullpointerexception可能来自webRequest,但显然没有在第70行抛出异常。 / p>

/* 70 */       for (Iterator<String> iterator = 
webRequest.getHeaderNames(); iterator.hasNext();) {
/* 71 */         String headerName = (String)iterator.next();
/* 72 */         for (String headerValue : webRequest.getHeaderValues(headerName)) {
/* 73 */           result.add(headerName, headerValue);
/*    */         }
/*    */       }

1 个答案:

答案 0 :(得分:0)

HttpHeaders可以用作控制器方法的返回值放在ResponseEntity对象中。 Spring不会自动创建这种类型的参数。还有许多其他类可以使用。参见https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-arguments

也许您将WebRequest用作方法参数,并使用WebRequest#getHeader来获取方法内部的特定标头值。