Полностью отключить обработку исключений Spring Boot? - PullRequest
1 голос
/ 11 ноября 2019

Я действительно устал от всего этого @ControllerAdvice, @ExceptionHandler, DefaultHandlerExceptionResolver, ErrorAttributes, Whitelabel Error Page материала.

Я хочу избавиться от всего этого и обработать исключения вручную в первом фильтре моей цепочки фильтров, например:

try {
    chain.doFilter()
} catch (Exception e) {
    ...
}

Примечание: Я знаю, как отключить Whitelabel Error Page:

@SpringBootApplication(exclude = {ErrorMvcAutoConfiguration.class})
public class Application

Но это не единственное, что я хочу отключить. Я тоже хочу избавиться от DefaultHandlerExceptionResolver.

1 Ответ

2 голосов
/ 11 ноября 2019

Большая часть / большая часть обработки ошибок настроена на ErrorMvcAutoConfiguration. Поэтому вам нужно будет исключить эту автоконфигурацию из вашего приложения:

С помощью аннотации:

@EnableAutoConfiguration(exclude = org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration)

Или свойств конфигурации:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration

Если вы используете реактивSpring, тогда вы захотите исключить ErrorWebFluxAutoConfiguration.

Имейте в виду, что могут быть другие конфигурации, которые конфигурируют другие компоненты ошибок, но об этом следует заботиться большую часть. Вам нужно будет выполнить отладку / пошаговую процедуру запуска приложения, чтобы выяснить, где / что настраивает эти другие компоненты, а также отключить эту автоконфигурацию.

Из моей отладки @ControllerAdvice, @ExceptionHandlerDefaultHandlerExceptionResolver получить загрузку с помощью WebMvcConfigurationSupport , в частности, методом handlerExceptionResolver.

Как указано в javadocs:

AnАльтернативный более продвинутый вариант - это расширение непосредственно из этого класса и переопределение методов по мере необходимости, не забывая добавить @Configuration к подклассу и @Bean для переопределения методов @Bean. Для получения дополнительной информации см. Javadoc @ EnableWebMvc.

Вероятно, вам нужен расширенный вариант, поскольку вы хотите полностью взять под контроль обработку ошибок, предоставляемую Spring Boot. Таким образом, следуя совету javadoc:

@Configuration
public class CustomWebMvcConfigurationSupport extends WebMvcConfigurationSupport {

    @Override
    protected void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
        // Define your custom resolvers here.
        // List must NOT be empty otherwise default resolves will kick in.
    }

    @Bean
    @Override
    public HandlerExceptionResolver handlerExceptionResolver(
            @Qualifier("mvcContentNegotiationManager") ContentNegotiationManager contentNegotiationManager) {
        // Or completely take control over the resolvers
        HandlerExceptionResolverComposite composite = new HandlerExceptionResolverComposite();
        composite.setOrder(0);
        composite.setExceptionResolvers(Collections.emptyList());
        return composite;
    }
}

Но опять же, как указано выше, вам нужно будет выполнить отладку / пошаговую процедуру запуска приложения, чтобы выяснить, где / что настраивает другие bean-компоненты, которые вы хотите отключить, ипереопределить / отключить эту конфигурацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...