如何在所有控制器之间共享对象?

时间:2017-04-26 10:03:04

标签: spring spring-boot

我使用Spring-Boot和Thymeleaf作为模板引擎。

我有一个网络应用程序,其搜索输入可在任何人的每个视图中访问(搜索触发表单提交),表单具有th:object="${searchObject}"属性,我正在使用@RequestBody在我的帖子控制器中获取对象。

现在,我到目前为止所做的是为每个控制器添加一个model.addAttribute("searchObject", new SearchObject())并且它工作正常但它让我思考,如果有一种方法可以在我可以声明的整个应用程序之间共享一个对象怎么办?一次,到处使用..?

所以我做了一些搜索,发现了各种解决方案,这些解决方案涉及spring应用程序中的可用上下文。 我试图实现其中的一些,但无法弄清楚如何。

那么,有没有简单的方法在整个应用程序之间共享一个对象,所以可以在百万富翁内部访问,而无需在每个控制器中编写相同的代码?

我认为它应该看起来像这样

th:object="${#sharedObjects.getObjectByName(object)}"

感谢。

1 个答案:

答案 0 :(得分:2)

您可以使用@ControllerAdvice在所有控制器中添加模型属性:

@ControllerAdvice
public class SearchObjectModelAttributeAdvice {
    @ModelAttribute("searchObject")
    public SearchObject searchObject() {
        return new SearchObject();
    }
}