【问题标题】:Passing variable from @Controller to @ControllerAdvice in SpringMVC在Spring MVC中将变量从@Controller传递给@ControllerAdvice
【发布时间】:2015-12-09 11:43:10
【问题描述】:

我创建了@ControllerAdvice,它必须为我设置一些模型属性。

@ModelAttribute
public void globalAttributes(Model model) {
       model.addAttribute("pageId", PAGE_ID);
}

这是我需要的通用示例,PAGE_ID 表示实际控制器必须设置的一些变量。由于@ControllerAdvice 在控制器之前运行,我如何声明这个变量并在 Advice 中使用它?如果有可能的话。

【问题讨论】:

  • 我想你已经用“因为@ControllerAdvice 在控制器之前运行”回答了你自己的问题 - 你有没有办法在 ControllerAdvice 中设置 ModelAttribute,并在 Controller 中引用它?跨度>
  • 我是这么认为的。关键是,我必须调用一个服务并传递该特定变量,这对于每个控制器都是不同的,并将返回结果设置为@ControllerAdvice 中的模型属性。
  • @DaveyDaveDave 我不确定你是对的。假设你使用@ControllerAdvice来处理异常(官方例子中显示),怎么会是他之前运行过呢?我猜ControllerAdvice 是另一个可用的控制器,它根据提供给方法的注释执行(例如@ExceptionHandling@ModelAttribute

标签: java spring spring-mvc


【解决方案1】:

我认为更好的解决方案是为您的控制器使用某种抽象类模式

public abstract class AbstractController {

    @ModelAttribute
    public void globalAttributes(Model model) {
       model.addAttribute("pageId", getPageId());
    }

    abstract String getPageId();
}

public class MyController extends AbstractController {

    @Override
    public String getPageId() {
       return "MyPageID"
    }

    //..your controller methods
}

【讨论】:

  • 是的,我已经有了那个解决方案,但想检查一下我是否可以使用 @ControllerAdvice 完成同样的工作:) 谢谢
  • @Alchnemesis:当前版本 4.2.3 的 Spring-Reference 没有任何暗示可以获取有关(将/已经)处理请求的方法的任何信息。 - 那么答案是:不,你不能
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
相关资源
最近更新 更多