Я использую весеннюю версию загрузки 1.1.8, у меня есть следующий перехватчик, перехватывающий все входящие HTTP-запросы, одна функциональность - это печать кода состояния ответа на рукоятке сообщения
Spring boot standalone tomcat HttpServletResponse всегда возвращает статус 200
public class TimingInterceptor extends HandlerInterceptorAdapter {
private static final String TIME_ATTR = "startTime";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
request.setAttribute(TIME_ATTR, System.currentTimeMillis());
boolean hasQuery = StringUtils.isNotEmpty(request.getQueryString());
log.info("[START] method={} path={} {}{}", request.getMethod(), request.getRequestURI(),
hasQuery ? "?" : "", hasQuery ? request.getQueryString() : "");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
try {
long duration = System.currentTimeMillis() - (long) request.getAttribute(TIME_ATTR);
log.info("[FINISH] method={} path={} status={} [time={}] Milisec",
request.getMethod(), request.getRequestURI(), response.getStatus(), duration);
} catch (Exception e) {
log.error("Error while measuring timing", e);
}
super.postHandle(request, response, handler, modelAndView);
}
}
При работе на встроенном котом статусы, как и ожидалось, например, в данном случае:
@RequestMapping(method = RequestMethod.GET, value = "/test")
public ResponseEntity<Void> test(HttpServletResponse response) {
return new ResponseEntity<Void>(HttpStatus.CREATED);
}
Перехватчик напечатает 201, который (СОЗДАНО), но при работе на автономном котом перехватчик напечатает 200 также попробовал этот способ
@RequestMapping(method = RequestMethod.GET, value = "/test")
public ResponseEntity<Void> test(HttpServletResponse response) {
response.setStatus(201);
return new ResponseEntity<Void>(HttpStatus.CREATED);
}
Но без успеха, любые идеи, что не так? по достоинству оценят помощь!
Когда вы используете автономный tomcat, как вы его настраиваете? Как вы его развертываете? Как вы производите свою войну? «Печать» означает «возврат в браузер с кодом состояния xx»? –
Дэйв внизу в основном диагностировал проблему .. можете ли вы предложить какой-нибудь обходной путь? спасибо –
В конечном счете, экземпляр фильтра доступен в контексте вашего приложения. Я полагаю, вы могли бы написать компонент контекста, который мог бы удалить фильтр из контекста. Или вы можете разветвить репозиторий git, содержащий фильтр, исправить код, чтобы он работал правильно, отправить запрос на перенос в проектную строку и использовать вашу собственную исправленную версию до ее выпуска. –