如何将模型属性添加到默认错误页面
How to add model attributes to the default error page
当用户请求在应用程序中没有任何映射的 url(例如 url,如 /aaa/bbb 在应用程序中没有它的映射)同时能够将模型属性添加到页面?
SO 中有一些答案,但那些给我带来了其他问题,更重要的是,他们没有说明如何将模型属性添加到错误页面。
我找到的最佳解决方案是:
- 创建一个实现
ErrorController
并覆盖的控制器
它的 getErrorPath()
方法。
- 在该控制器中创建一个处理程序方法,注释为
@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
。
当用户请求在应用程序中没有任何映射的 url(例如 url,如 /aaa/bbb 在应用程序中没有它的映射)同时能够将模型属性添加到页面?
SO 中有一些答案,但那些给我带来了其他问题,更重要的是,他们没有说明如何将模型属性添加到错误页面。 我找到的最佳解决方案是:
- 创建一个实现
ErrorController
并覆盖的控制器 它的getErrorPath()
方法。 - 在该控制器中创建一个处理程序方法,注释为
@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
。