如何在spring启动中拦截嵌入式Tomcat上的“全局” 404

我对spring-boot附带的嵌入式tomcat遇到了一个相当奇怪的问题,特别是它的错误处理。

基本上,我试图通过自定义处理程序处理所有异常。长话短说:它适用于除404之外的所有内容。是否通过其他机制而不是异常处理?

我测试过的所有其他状态代码都称为自定义解析器,只有404呈现给我默认的Tomcat404页面。更具体地说,将404抛出到控制器外部,例如,如果仅注册了用于/test的控制器,则请求/teXst。在这种情况下,我不会调用Resolver,而只能看到默认的Tomcat HTTP Status 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 Error处理都摆脱我的注释方式

@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以外的所有异常都可以正常工作。知道什么机制可以创建这些页面,以及为什么不调用我的异常解析器吗?这是在使用SpringMVC 4.1.7.RELEASE和嵌入式Tomcat 8.0.23的Spring Boot 1.2.5.RELEASE上

回答:

事实证明,我找到了答案。通过SpringConfiguration无法实现,但是您可以创建自己的ServletDispatcher并将其配置为引发异常,如下所述:如何配置默认的DispatcherServlet?

然后我上面的代码捕获404很好

以上是 如何在spring启动中拦截嵌入式Tomcat上的“全局” 404 的全部内容, 来源链接: utcz.com/qa/408316.html

回到顶部