Большая часть / большая часть обработки ошибок настроена на 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
, @ExceptionHandler
,и DefaultHandlerExceptionResolver
получить загрузку с помощью 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-компоненты, которые вы хотите отключить, ипереопределить / отключить эту конфигурацию.