【发布时间】:2020-10-10 08:21:39
【问题描述】:
我正在学习 Java Spring Boot 教程,并且正在尝试处理 404 异常。我有教程中的确切代码,但由于某种原因它不起作用,尽管 403 错误正在工作。在本教程中,讲师处理所有未决异常的方式如下,特别是 defaultErrorHandler()。但是,这不起作用:
@ControllerAdvice
public class GlobalExceptionHandler {
@Value("${message.error.exception}")
private String exceptionMessage;
@Value("${message.error.duplicate.user}")
private String duplicateUserMessage;
@ExceptionHandler(value=Exception.class)
public ModelAndView defaultErrorHandler(HttpServletRequest req, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.getModel().put("message", exceptionMessage);
modelAndView.getModel().put("url", req.getRequestURL());
modelAndView.getModel().put("exception", e);
modelAndView.setViewName("app.exception");
return modelAndView;
}
@ExceptionHandler(value=DataIntegrityViolationException.class)
public ModelAndView duplicateUserHandler(HttpServletRequest req, Exception e) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.getModel().put("message", duplicateUserMessage);
modelAndView.getModel().put("url", req.getRequestURL());
modelAndView.getModel().put("exception", e);
modelAndView.setViewName("app.exception");
return modelAndView;
}
}
然后我尝试添加类似于讲师处理 403 错误的内容,如下所示,但这也不起作用:
@RequestMapping("/403")
ModelAndView accessDenied(ModelAndView modelAndView) {
System.out.println("We're here");
modelAndView.getModel().put("message", accessDeniedMessage);
modelAndView.setViewName("app.message");
return modelAndView;
}
@RequestMapping("/404")
ModelAndView pageNotFound(ModelAndView modelAndView) {
modelAndView.getModel().put("message", exceptionMessage);
modelAndView.setViewName("app.message");
return modelAndView;
}
我尝试通过将 System.out.println("test") 放入每个可疑方法中进行调试,但都没有达到。任何帮助,将不胜感激。谢谢!
【问题讨论】:
-
当您说
However, this is not working时,您遇到的错误是什么?有日志吗? -
尝试强制
throw new DataIntegrityViolationException( "Exception forced to happen" )看看是否有效。查看记录的任何异常。对我来说ExceptionHandler代码看起来不错 -
抱歉回复晚了,但是是的,当我尝试转到未知网址而不是被定向到为用户处理 404 错误的自定义页面时,我得到以下信息:[nio-8080-exec-1] osweb.servlet.DispatcherServlet : 退出“ERROR”调度,状态 404。我设置了无论用户在 localhost:8080/ 之后输入什么,他们最初都会被定向到 localhost:8080/登录页面。但是,一旦登录,如果他们在 localhost:8080/ 之后键入任何不是应用程序 url 的内容,那么我会错误地收到白标错误。
标签: java spring-boot web error-handling http-status-code-404