在SpringBoot Web应用程序中找不到处理404或noHandlerFoundException

时间:2018-10-23 13:26:49

标签: spring-boot exception-handling

我已经学习Spring仅仅7个月了。当我仅使用spring MVC时,我过去通过在调度程序servlet中抛出noHandlerFoundException来处理404找不到的异常。现在,我正在学习春季启动,任何人都可以向我解释如何处理启动时找不到404的异常或noHandlerFoundException吗?

2 个答案:

答案 0 :(得分:0)

为什么不尝试像Spring那样的旧方法? 它应该可以在Boot中工作,并且建议我以这种方式处理异常。

答案 1 :(得分:0)

我遇到了同样的问题,解决了。下面给出解决问题的步骤。

  1. 创建一个带有GlobalExceptionHandler注释的类@ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler 
{
    @ExceptionHandler(NoHandlerFoundException.class)
    public String handleNotFoundError(Exception ex) 
    {
        return "redirect:/yourCustom404page";
    }
}
  1. 默认情况下,当页面/资源不存在时,servlet容器将呈现默认的404页面。如果您想要自定义404响应,那么如果找不到任何处理程序,则需要告诉DispatcherServlet引发异常。我们可以通过将throwExceptionIfNoHandlerFound servlet初始化参数设置为true
  2. 来完成此操作。

实现这一目标

a。春季靴
spring.resources.add-mappings=false在您的application.properties或yaml文件中。

b。如果基于spring-mvc java的配置是

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer
{
    ...

    @Override
    protected DispatcherServlet createDispatcherServlet(WebApplicationContext servletAppContext) 
    {
        final DispatcherServlet servlet = (DispatcherServlet) super.createDispatcherServlet(servletAppContext);
        servlet.setThrowExceptionIfNoHandlerFound(true);
        return servlet;
    }

}

c。如果是基于spring-mvc xml的配置,则像这样初始化您的调度程序servlet

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>throwExceptionIfNoHandlerFound</param-name>
        <param-value>true</param-value>
    </init-param>
</servlet>