【发布时间】:2019-01-25 22:31:06
【问题描述】:
我不熟悉 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);
}
我尝试在没有HttpHeaders 的情况下使用@RequestHeaders,就像这样
@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 行引发异常
/* 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);
/* */ }
/* */ }
【问题讨论】:
标签: java spring http-headers