我有两个全局控制器建议类定义如下。
@ControllerAdvice
public class GlobalModelAttributes {
@ModelAttribut("mkey")
public String mKey() {
return "aValue";
}
}
另一个用于异常处理的类。
@ControllerAdvice
public class GlobalExceptionHandler {
private static final String ERROR_4_XX = "error/4xx";
@ResponseStatus(HttpStatus.BAD_REQUEST)
@ExceptionHandler({InvalidRequestException.class}
)
public ModelAndView handleBadRequest() {
ModelAndView result = new ModelAndView(ERROR_4_XX);
result.addObject(EXCEPTION_MESSAGE, "An invalid value provided");
return result;
}
}
在
error/4xx.html
中,我使用了 mkey
的值,假设我会在视图中获取该值。
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<link th:rel="stylesheet" href="/css/error.css" type="text/css" />
</head>
<body>
<div class="container">
<div class="bg-container">
<h1 class="text-err">
<span th:text="${mkey}"></span>
</h1>
</div>
</div>
</body>
</html>
但是,该值未打印,我发现以下链接(8 年前但仍然有效),其中提到这种值不可用于异常视图。
https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc
我相信会有一种方法来获取这些全局模型属性。 我不想在
@ExceptionHandler
中复制这些模型属性,因为其中有很多属性,也有很多 @ExceptionHandler
。
我也有同样的问题。我发现“异常处理过程通常会绕过正常请求处理流程的一部分,包括
@ModelAttribute
方法的结果。”
您应该将设置全局属性的逻辑移至每个异常处理程序方法。