Spring - исключение нулевого указателя при использовании HttpHeaders с @RequestHeaders - PullRequest
0 голосов
/ 26 января 2019

Я не знаком с пружиной, но я сталкиваюсь с этой проблемой, где я сталкиваюсь с нулевой ошибкой в ​​org.springframework.web.method.annotation.RequestHeaderMapMethodArgumentResolver.resolveArgument(RequestHeaderMapMethodArgumentResolver.java:72)

. Я смог случайно выяснить, что именно эта @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, когда делаю запрос, почему я получаю это исключение весной?Существуют ли какие-то ограничения на то, какие запросы могут использовать объект HttpHeaders ???

Ниже показан заголовок моего запроса:

This is what my request header for the request looks like

Кажется, это проблемный раздел, который я извлек из декомпилятора, за исключением того, что оно было сгенерировано в строке 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);
/*    */         }
/*    */       }

1 Ответ

0 голосов
/ 26 января 2019

HttpHeaders можно использовать для помещения в объект ResponseEntity в качестве возвращаемого значения метода контроллера.Параметры этого типа не создаются автоматически в Spring.Есть много других классов, которые можно использовать.См. https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-ann-arguments

Возможно, вы берете WebRequest в качестве параметра метода и WebRequest # getHeader для получения определенного значения заголовка внутри вашего метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...