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или другой механизм для предоставления минимизированного ответа.

Другие вопросы по тегам