在 Spring 的另一个控制器建议中使用全局模型属性

问题描述 投票:0回答:1

我有两个全局控制器建议类定义如下。

@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

  • 模型增强方法(用于向模型添加附加数据) 用@ModelAttribute注释。请注意,这些属性不是 可用于异常处理视图。

我相信会有一种方法来获取这些全局模型属性。 我不想在

@ExceptionHandler
中复制这些模型属性,因为其中有很多属性,也有很多
@ExceptionHandler

java spring spring-mvc thymeleaf
1个回答
0
投票

我也有同样的问题。我发现“异常处理过程通常会绕过正常请求处理流程的一部分,包括

@ModelAttribute
方法的结果。” 您应该将设置全局属性的逻辑移至每个异常处理程序方法。

© www.soinside.com 2019 - 2024. All rights reserved.