【发布时间】:2015-10-25 00:41:57
【问题描述】:
我对 spring-boot 附带的嵌入式 tomcat 有一个相当奇怪的问题,特别是它的错误处理。
基本上,我正在尝试通过自定义处理程序处理所有异常。 长话短说:它适用于除 404 之外的所有内容。是否通过任何其他机制而不是异常处理?
我测试的所有其他状态代码都调用了我的自定义解析器,只有 404 为我提供了默认的 Tomcat 404 页面。更具体地说,404 被抛出控制器之外,例如如果只有 /test 注册的控制器,则请求 /teXst。在这种异常情况下,我不会调用我的解析器,只会看到默认的 Tomcat HTTP 状态 404 页面。
知道什么会妨碍我吗? 这是我设置解析器的方法
public class GlobalExceptionResolver extends AbstractHandlerExceptionResolver {
@Override
public int getOrder() {
return Integer.MIN_VALUE;
}
@Override
protected boolean shouldApplyTo(HttpServletRequest request, Object handler) {
return true;
}
@Override
protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// my stuff ending with returning an instance of ModelAndView
}
为了让所有默认的 Spring-Boot 错误处理不受我注释的影响
@EnableAutoConfiguration(exclude = org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration.class)
这给我留下了 404、500 等的默认 Tomcat 错误页面,最后设置了我的自定义处理程序
@Bean
public WebMvcConfigurerAdapter adapter() {
return new WebMvcConfigurerAdapter() {
@Override
public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {
exceptionResolvers.add(new GlobalExceptionResolver());
}
如上所述,此设置适用于除 HTTP 状态 404 之外的所有异常。知道什么机制创建这些页面以及为什么不调用我的异常解析器吗?这是在 Spring Boot 1.2.5.RELEASE 上使用 Spring MVC 4.1.7.RELEASE 和嵌入式 Tomcat 8.0.23
【问题讨论】:
标签: spring-mvc tomcat spring-boot