如何在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错误页面,最后使用以下命令设置了我的自定义处理程序
@Beanpublic 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