Java 用于捕获错误的Spring Exception Handler控制器不工作
我正在尝试创建一个控制器,这样当用户转到一个不存在的URL时,他/她将被映射到一个自定义错误页面“error.jsp” 当前,我的异常处理程序控制器如下所示:Java 用于捕获错误的Spring Exception Handler控制器不工作,java,spring,jsp,model-view-controller,Java,Spring,Jsp,Model View Controller,我正在尝试创建一个控制器,这样当用户转到一个不存在的URL时,他/她将被映射到一个自定义错误页面“error.jsp” 当前,我的异常处理程序控制器如下所示: @ControllerAdvice public class ExceptionHandlerController { private static final Logger logger = LoggerFactory.getLogger(ExceptionHandlerController.class); @Exc
@ControllerAdvice
public class ExceptionHandlerController {
private static final Logger logger = LoggerFactory.getLogger(ExceptionHandlerController.class);
@ExceptionHandler(value = {Exception.class, RuntimeException.class})
public String defaultErrorHandler(Exception e) {
logger.error("Unhandled exception: ", e);
return "error";
}
@ExceptionHandler(NoHandlerFoundException.class)
public String handle(Exception e) {
logger.error("No handler found!", e);
return "error";
}
}
然而,当我运行我的web应用程序并访问一个不存在的URL时,我会被重定向到默认的浏览器页面,并说“404此页面不能为页面。”
有没有人对为什么这不起作用有什么想法或建议?来自
默认情况下,当DispatcherServlet找不到
请求它发送一个404响应。但是如果它的属性
“ThroweExceptionIfNoHandlerFound”设置为true此异常为
引发,可以使用配置的HandlerExceptionResolver进行处理
要解决这个问题,你需要确保你做了两件事
@Bean
HandlerExceptionResolver customExceptionResolver(){
SimpleMappingExceptionResolver s=新的SimpleMappingExceptionResolver();
属性p=新属性();
//将spring内部错误NoHandlerFoundException映射到视图名称。
p、 setProperty(NoHandlerFoundException.class.getName(),“错误页”);
s、 设置例外应用程序(p);
//如果要发送非默认值200的代码,请取消对以下行的注释
//s、 addStatusCode(“错误页”,HttpStatus.NOT_FOUND.value());
}请参阅完整的示例。我已经完成了这两个步骤,并遵循了您提供的示例,但仍然没有将其映射到正确的错误页面。
//This resolver will be processed before default ones
s.setOrder(Ordered.HIGHEST_PRECEDENCE);
return s;
public class AppInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
....
......
@Override
protected FrameworkServlet createDispatcherServlet (WebApplicationContext wac) {
DispatcherServlet ds = new DispatcherServlet(wac);
//setting this flag to true will throw NoHandlerFoundException instead of 404 page
ds.setThrowExceptionIfNoHandlerFound(true);
return ds;
}
}