Java Spring Boot Web App:处理404异常

2020年12月2日 86点热度 0条评论

我正在阅读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”)放入每个可疑方法中进行调试,但均未达到。任何帮助,将不胜感激。谢谢!

解决方案如下:

如果您想处理404异常以显示自定义页面而不是可白化的错误。可以通过在资源目录中创建名为error的文件夹来实现。在error文件夹中创建404.html文件并添加html代码,样式等。
现在Spring Boot会选择您的404.html文件并在出现404错误时向用户显示,这样您也可以处理任何错误,只需将错误代码的文件名放在501.html,407.html等中即可。