我有一个支持搜索和结果列表的抽象控制器支持类:
@Controller
@SessionAttributes("query")
public abstract class SearchController<Q extends SearchQuery> {
@RequestMapping
public String performSearch(@ModelAttribute("query") Q query) {
....
}
@ModelAttribute("query")
public abstract Q createDefaultSearchQuery();
}
多个实际搜索控制器扩展了这个基类。
在访问其中一个控制器(例如使用BookSearchQuery实现SearchQuery
的/searchBooks.html
)后,查询正确地存储在会话中,并可用于随后的请求。
然而,当我访问另一个控制器(例如使用AuthorSearchQuery实现SearchQuery
的/ searchAuthors.html
)时,上次请求的查询(BookSearchQuery
)仍然被用于新的控制器,导致之后出现 ClassCastException
。
我尝试将@SessionAttribute
注释从支持类移动到实现类,但无济于事。
我做错了什么或设计有问题吗? 我该怎么办?
非常感谢!