Spring MVC:@SessionAttributes在控制器之间共享?

我有一个搜索和结果列表的抽象控制器支持类:

@Controller
@SessionAttributes("query")
public abstract class SearchController@modelattribute("query") Q query) {
        ....
    }

    @modelattribute("query")
    public abstract Q createDefaultSearchQuery();
}

几个实际的搜索控制器扩展了这个基类.

在访问其中一个控制器(比如使用BookSearchQuery实现SearchQuery的/searchBooks.html)后,查询将正确存储在会话中,可用于后续请求.

但是,当我访问另一个控制器(比如/searchAuthors.html使用AuthorSearchQuery实现SearchQuery)时,最后一个请求(BookSearchQuery)的查询仍在用于新控制器,导致稍后出现ClassCastException.

我已经尝试将@SessionAttribute注释从支持类移动到实现类,但无济于事.

有什么我做错了还是这个设计?我能做什么?

非常感谢!

最佳答案
使用@SessionAttributes,这些对象将以相同的名称存储在HttpSession中,并且可以从不同的控制器访问(共享)它们.所以,Spring正确行事.

我认为你的场景中最好的方法是在每个子类中重命名这个属性(“BookQuery”,“AutorQuery”,……).根本不是很优雅:(

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...