Spring Boot – фильтр не применяется для noHandlerFoundException
Я попытался реализовать фильтр после этого ответа:
Как минимизировать динамические ответы HTML в Spring?
Это работает очень хорошо, однако этот фильтр не работает, когда выдается ошибка 404. Почему нет? И как мне применить этот фильтр и к моей странице с ошибкой 404?
Решение:
Используя следующий код:
@ControllerAdvice
@Order(HIGHEST_PRECEDENCE)
public class NotFoundException {
@ExceptionHandler(NoHandlerFoundException.class)
public String noHandlerFoundException() {
// provide information to view
return "error";
}
}
с помощью application.properties:
spring.web.resources.add-mappings=false
spring.mvc.throw-exception-if-no-handler-found=true
разрешает перенаправление на страницу ошибки и фильтр применяется. Однако в журнал записывается предупреждение: «Нет сопоставления для GET /css/styles.css» (и всех других статических ресурсов). РегистрацияResourceHandler
с:
resourceHandlerRegistry.addResourceHandler("/css/**").addResourceLocations("classpath:/static/css/");
// register resource handler for other static content
решил это. См. также проблемы: № 7653 (spring-boot) и № 29491 (spring-framework) в проектах Spring, которые кажутся связанными. Спасибо!
1 ответ
Ошибка 404 не является «нормальной» ошибкой типа исключения в Spring Boot.
Чтобы превратить его в обрабатываемое исключение, добавьте следующее в application.properties:
spring.mvc.throw-exception-if-no-handler-found=true
Этого может быть достаточно, чтобы сработать фильтр минимизации.
В противном случае добавьте обработчик исключений для не найденных, чтобы применитьCharResponseWrapper
или другой механизм для предоставления минимизированного ответа.