Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-ThroweExceptionIfNoHandlerFound不起作用_Java_Spring_Exception_Http Status Code 404 - Fatal编程技术网

java-ThroweExceptionIfNoHandlerFound不起作用

java-ThroweExceptionIfNoHandlerFound不起作用,java,spring,exception,http-status-code-404,Java,Spring,Exception,Http Status Code 404,我试图在完全使用Java配置的Spring MVC应用程序中使用@ControllerAdvice处理404错误 这是我的密码: 公共类WebAppInitializer实现WebApplicationInitializer { @凌驾 启动时的公共void(ServletContext容器) { //创建DispatcherServlet的Spring应用程序上下文 AnnotationConfigWebApplicationContext dispatcherServlet=新的Annota

我试图在完全使用Java配置的Spring MVC应用程序中使用
@ControllerAdvice
处理404错误

这是我的密码:

公共类WebAppInitializer实现WebApplicationInitializer
{
@凌驾
启动时的公共void(ServletContext容器)
{
//创建DispatcherServlet的Spring应用程序上下文
AnnotationConfigWebApplicationContext dispatcherServlet=新的AnnotationConfigWebApplicationContext();
dispatcherServlet.register(WebMvcConfig.class);
dispatcherServlet.setServletContext(容器);
dispatcherServlet.refresh();
CookieHelper cookie=(CookieHelper)dispatcherServlet.getBean(“cookie”);
最终Gson Gson=(Gson)dispatcherServlet.getBean(“Gson”);
//注册并映射DispatcherServlet
ServletRegistration.Dynamic dispatcher=container.addServlet(“dispatcher”,新DispatcherServlet(DispatcherServlet));
dispatcher.addMapping(“/”);
dispatcher.setLoadOnStartup(1);
dispatcher.setInitParameter(“ThroweExceptionIfNoHandlerFound”、“true”);
FilterRegistration.Dynamic filter=container.addFilter(“BaseFilter”,新的BaseFilter(cookie,gson));
setInitParameter(“forceEncoding”、“true”);
addMappingForUrlPatterns(null,true,“/coolers/*”);
addMappingForUrlPatterns(null,true,“/hothouses/*”);
addMappingForUrlPatterns(null,true,“/lang/*”);
addMappingForUrlPatterns(null,true,“/organizations/*”);
addMappingForUrlPatterns(null,true,“/reworks/*”);
addMappingForUrlPatterns(null,true,“/select/*”);
addMappingForUrlPatterns(null,true,“/volumes/*”);
}
}
和我的GlobalExceptionHandlerController:

@ControllerAdvice
公共类GlobalExceptionHandlerController
{
@ExceptionHandler(NoHandlerFoundException.class)
@ResponseStatus(未找到HttpStatus.NOT_)
公共字符串句柄(){
System.out.println(“测试”);
返回“错误/索引”;
}
} 

NoHandlerFoundException未触发?

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

  • 创建一个类
    GlobalExceptionHandler
    ,并用
    @ControllerAdvice
  • @ControllerAdvice
    公共类GlobalExceptionHandler
    {
    @ExceptionHandler(NoHandlerFoundException.class)
    公共字符串handleNotFoundError(异常ex)
    {
    返回“重定向:/yourCustom404page”;
    }
    }
    
  • 默认情况下,当页面/资源不存在时,servlet容器将呈现默认的404页面。如果需要自定义404响应,则需要告诉
    DispatcherServlet
    在未找到处理程序时引发异常。我们可以通过将
    throweExceptionIfNoHandlerFound
    servlet初始化参数设置为
    true
  • a。如果spring mvc基于java的配置

    公共类AppInitializer扩展AbstractAnnotationConfigDispatcherServletInitializer
    {
    ...
    @凌驾
    受保护的DispatcherServlet createDispatcherServlet(WebApplicationContext servletAppContext)
    {
    最终DispatcherServlet=(DispatcherServlet)super.createDispatcherServlet(servletAppContext);
    setThroweExceptionIfNoHandlerFound(true);
    返回servlet;
    }
    }
    
    b。如果是基于spring mvc xml的配置,请按如下方式初始化dispatcher servlet

    
    调度员
    org.springframework.web.servlet.DispatcherServlet
    ThroweExceptionIfNoHandlerFound
    真的
    
    c。如果弹簧启动
    spring.resources.add mappings=false
    在application.properties或yaml文件中


    希望它有帮助

    您是否正在执行任何会导致NoHandlerFoundException的操作?即使线程较旧,遇到同样的情况,也要给出书面答案,以便它可以帮助其他人。