@ControllerAdvice 被所有控制器调用,而不仅仅是 basePackageClasses

Jav*_*aJd 1 java spring spring-mvc

我无法提供实际的代码,因为它位于另一个系统上,但我在 Spring 4.2.6 Web 版本中看到的问题是使用了 basePackageClasses,但实际上并未映射到控制器。

假设我有 3 个控制器:AController.class、BController.class 和 CController.class。

对于每个我都创建了一个ControllerAdvice:AControllerAdvice.class,BControllerAdvice.class&CControllerAdvice.class。

我使用注释如下:

@ControllerAdvice(basePackageClasses = AController.class)
public class AControllerAdvice{
  @ModelAttribute
  public void addModelInformation(Model model){
    //controller specific model information for header and footer added here
  }
}
Run Code Online (Sandbox Code Playgroud)

我所经历的是,当我在 AController.class 中调用休息方法时,我已经通过日志记录验证了从所有三个 ControllerAdvice 调用“addModelInformation”方法,因此 Spring 的排序调用的最后一个方法设置了标头和页脚的最终效果是页眉和页脚保持静态。

通过文档 Spring 应该支持,我的理解是,只应该调用位于该映射控制器中的其余方法的 ControllerAdvice。所以我不得不得出结论,我设置了一些错误的东西。我正在使用 JavaConfig,期待收到你们的来信!

Nik*_*lay 7

你应该使用assignableTypes

@ControllerAdvice(assignableTypes = AController.class)
public class AControllerAdvice {
    @ModelAttribute
    public void addModelInformation(Model model){
         //controller specific model information for header and footer added here
    }
}
Run Code Online (Sandbox Code Playgroud)