Не удалось установить заголовок ответа в перехватчике postHandle

#spring-boot

#весенняя загрузка

Вопрос:

Недавно я пытаюсь добавить заголовок ответа в postHander перехватчике

     public boolean preHandle(HttpServletRequest request,
      HttpServletResponse response, Object handler) throws Exception{
        System.out.println("preHandle");
        response.setHeader("aaa","aaa");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        super.postHandle(request, response, handler, modelAndView);

        response.setHeader("bbb","bbb");
        System.out.println("postHandler");
    }
  

это мой основной код, но когда я отправляю запрос на сервер, в заголовок ответа добавляется только aaa .

введите описание изображения здесь

Но консоль все еще регистрирует

 preHandle
postHandler
  

Это означает, что postHandle фактически выполняется, но заголовок не добавляется.

Почему? как исправить эту проблему?

Комментарии:

1. Мое решение вам не помогло?

2. @bytefish — это решаемая проблема? если да, не могли бы вы, пожалуйста, добавить ответ?

Ответ №1:

Это рабочий пример. Если бы мне пришлось угадывать, что это происходит в

 super.postHandle(request, response, handler, modelAndView);
  

Веб-конфигурация

 @Component
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new CustomHandleInterceptor());
    }
}
  

Перехватчик

 @Component
public class CustomHandleInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        response.setHeader("pre","works");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        response.setHeader("post","works");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        response.setHeader("complete","works");
    }
}
  

Контроллер

 @Controller
public class GreetingController {
    @GetMapping("/greeting")
    public String greetingMethod(@RequestParam(name="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }
}
  

Заголовки ответов

 $ curl -I  http://localhost:8080/greeting
HTTP/1.1 200 
pre: works
post: works
complete: works
Content-Type: text/html;charset=UTF-8
Content-Language: en-US
Content-Length: 212
Date: Fri, 15 Mar 2019 01:42:08 GMT
  

Комментарии:

1. Я использую только это, но проблема все та же. Не удалось установить заголовки ответа в postHandle, но удалось установить в preHandle.

2. @Jason — здесь то же самое! Я пробовал то же самое, но у меня не получилось!