【发布时间】:2020-11-29 12:51:58
【问题描述】:
我遇到了 Spring mvc 注释 @Controlleradvice 的问题。 我有 2 个控制器类:UserGapsController 和 RegistrationBaseController 两个类都使用
- @Controller
- @Controlleradvice
- @Autowired 会话对象
- @Scope(WebApplicationContext.SCOPE_SESSION)
@Controlleradvice 注释。所以我在两个类中都有一个用@Modelattribute 注释的方法。 现在的问题是,当我在 UserGapsController.java 中使用 @Controlleradvice 时,应用程序运行良好,当我也在 RegistrationBaseController.java 中使用 @Controlleradvice 时,它在运行时出现以下错误:
创建名为 'org.springframework.web.servlet.mvc.method.annotation.requestmappinghandler 的 bean 时出错:调用 init 方法失败:嵌套的 exceotion 是 org.springframework.beans.factory.BeanCreationException :创建名为“userGapsController”的 bean 时出错:当前线程的范围“会话”不活动
这个错误的原因是什么,我们不能有2个@Controlleradvice注释类吗?当我在 RegistrationBaseController.java 中评论 @Controlleradvice 时,它执行得很好。
【问题讨论】:
-
如果你想要两个类有两个有@controlleradvice 那么只需添加@Order(Ordered.HIGHEST_PRECEDENCE) 注释。它会工作
-
@ArunPrasat 对不起,如果我听起来很愚蠢,但我是春天的新手。所以我们不能有 2 个具有 controlleradvice 注释的类?如果是,背后的逻辑是什么?我的理解是 controlleradvice 用于我们在方法级别使用 ModelAttribute 的地方。我的理解错了吗?
-
> 在方法级别使用@Modelattribute 时,必须使用@Controlleradvice 注释。这不是真的,
@ModelAttribute在常规控制器中工作得非常好。只有当你想要一个适用于所有控制器的@ModeLAttribute方法时,你才需要一个@ControllerAdvice
标签: java spring spring-mvc controller controller-advice