如何将模型属性添加到默认错误页面

How to add model attributes to the default error page

当用户请求在应用程序中没有任何映射的 url(例如 url,如 /aaa/bbb 在应用程序中没有它的映射)同时能够将模型属性添加到页面?

SO 中有一些答案,但那些给我带来了其他问题,更重要的是,他们没有说明如何将模型属性添加到错误页面。 我找到的最佳解决方案是:

  1. 创建一个实现 ErrorController 并覆盖的控制器 它的 getErrorPath() 方法。
  2. 在该控制器中创建一个处理程序方法,注释为 @RequestMapping("/error")

在这个方法中你可以添加你想要的任何模型属性和return你想要的任何视图名称:

@Controller
public class ExceptionController implements ErrorController {

    @Override
    public String getErrorPath() {
        return "/error";
    }

    @RequestMapping("/error")
    public String handleError(Model model) {
        model.addAttribute("message", "An exception occurred in the program");
        return "myError";
    }
}

现在,如果您想处理其他特定异常,您可以为它们创建 @ExceptionHandler 方法:

@ExceptionHandler(InvalidUsernameException.class)
public String handleUsernameError(Exception exception, Model model) {
    model.addAttribute("message", "Invalid username");
    return "usernameError";
}

备注

  • 如果您在 class 中添加特定的异常处理程序,请不要忘记使用 @ControllerAdvice(连同 @Controller

  • 覆盖的getErrorPath()方法可以return你想要的任何路径以及/error