我无法提供实际的代码,因为它在另一个系统上,但我在Spring 4.2.6 Web Release中看到的问题是使用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
}
}
我所遇到的是,当我在AController.class中调用rest方法时,我已经通过日志记录验证了' addModelInformation'从所有三个ControllerAdvice调用方法,因此Spring的排序调用的最后一个方法设置页眉和页脚的净效果,页眉和页脚保持静态。
通过文档Spring应该支持,我的理解是只应该调用驻留在该映射控制器中的rest方法的ControllerAdvice。所以我必须得出结论,我设置了一些错误的东西。我正在使用JavaConfig,期待收到你们的回复!
答案 0 :(得分:2)
您应该使用assignableTypes
:
@ControllerAdvice(assignableTypes = AController.class)
public class AControllerAdvice {
@ModelAttribute
public void addModelInformation(Model model){
//controller specific model information for header and footer added here
}
}
答案 1 :(得分:-1)
您应该将配置类传递给@ControllerAdvice
的basePackageClasses而不是控制器类。
假设您的配置名为ConfigClass
@Configuration
public class ConfigClass {
@Bean
public AController controllerA() {
....
}
... // your controllers to be weaved
}
然后你应该用
设置建议 @ControllerAdvice(basePackageClasses = ConfigClass.class)