#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 — здесь то же самое! Я пробовал то же самое, но у меня не получилось!