【问题标题】:@controlleradvice giving error : scope 'session' is not active for current thread@controlleradvice 给出错误:范围“会话”对于当前线程不是活动的
【发布时间】:2020-11-29 12:51:58
【问题描述】:

我遇到了 Spring mvc 注释 @Controlleradvice 的问题。 我有 2 个控制器类:UserGapsControllerRegistrationBaseController 两个类都使用

  1. @Controller
  2. @Controlleradvice
  3. @Autowired 会话对象
  4. @Scope(WebApplicationContext.SCOPE_SESSION)
在方法级别使用 @Modelattribute 时,必须使用

@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


【解决方案1】:

您试图让多个 @ControllerAdvice 类处理不同的异常。

您可以像这样使用 Order 而不是 controllerAdvice

@ControllerAdvice
@Order(Ordered.HIGHEST_PRECEDENCE)
public class RegistrationExceptionHandler {

    //...

}

@ControllerAdvice
@Order(Ordered.LOWEST_PRECEDENCE) // or any int value
public class UserGapsExceptionHandler {

    //...

}

【讨论】:

  • 对不起,如果我听起来很愚蠢,但我是春天的新手。所以我们不能有 2 个具有 controlleradvice 注释的类?如果是,背后的逻辑是什么?我的理解是 controlleradvice 用于我们在方法级别使用 ModelAttribute 的地方。我的理解错了吗?
猜你喜欢
  • 2015-01-29
  • 2019-11-08
  • 2018-10-28
  • 2014-02-12
  • 2011-09-21
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-11-05
相关资源
最近更新 更多