2016-07-14 4 views
2

В моем приложении загрузки Spring я пытаюсь добавить заголовок к моему отклику в методе afterCompletion() моего класса HandlerInterceptorAdapter.Как добавить заголовок для ответа HTTP в Spring HandlerInterceptorAdapter?

Контроллер возвращает ResponseEntity<MyResource> объекта, такие как:

return new ResponseEntity<>(mr, HttpStatus.OK); 

после POST запроса.

В перехватчике, когда я пытаюсь добавить заголовок к ответу, он не добавляется.

Однако, когда я изменить свой контроллер, чтобы вернуть ответ, как это:

return new ResponseEntity<>(HttpStatus.OK); 

Затем он работает.

Почему я могу добавить заголовок, только если тело ответа отсутствует?

Есть ли способ добавить его, когда тело ответа присутствует?

+0

http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-handlermapping-interceptor –

+3

Обратите внимание, что метод 'afterCompletion'' HandlerInterceptor' не всегда идеально подходит для использования с методами '@ ResponseBody' и' ResponseEntity'. В таких случаях «HttpMessageConverter» записывает и передает ответ до вызова 'afterCompletion', который делает невозможным изменение ответа, например, для добавления заголовка. Вместо этого приложение может реализовать «ResponseBodyAdvice» и либо объявить его как компонент «@ ControllerAdvice», либо настроить его непосредственно на «RequestMappingHandlerAdapter». –

ответ

1

Благодаря комментарию Али Дегани, я указал в правильном направлении и создал новый класс, который расширяет класс AbstractMappingJacksonResponseBodyAdvice (который реализует под ним ResponseBodyAdvice).

Я также получил намек от http://cubiccow.blogspot.co.za/2014/10/api-versioning-of-rest-services.html

Это позволило мне успешно модифицировать реакцию с новым заголовком, основанную на определенных условиях, после того, как он был обработан контроллером.

Смежные вопросы