我不熟悉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
对象的请求类型有什么限制?
请参阅以下有关我的请求标头的外观:
这似乎是我从反编译器中检索到的有问题的部分,但在第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);
/* */ }
/* */ }
答案 0 :(得分:0)
HttpHeaders可以用作控制器方法的返回值放在ResponseEntity对象中。 Spring不会自动创建这种类型的参数。还有许多其他类可以使用。参见https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-arguments
也许您将WebRequest用作方法参数,并使用WebRequest#getHeader来获取方法内部的特定标头值。