У меня есть абстрактный класс поддержки контроллера для поиска и списков результатов:
@Controller
@SessionAttributes("query")
public abstract class SearchController<Q extends SearchQuery> {
@RequestMapping
public String performSearch(@ModelAttribute("query") Q query) {
....
}
@ModelAttribute("query")
public abstract Q createDefaultSearchQuery();
}
Несколько реальных контроллеров поиска расширяют этот базовый класс.
После обращения к одному из контроллеров (скажем /searchBooks.html
с использованием BookSearchQuery implements SearchQuery
) запрос правильно сохраняется в сеансе и доступен для последующих запросов.
Однако, когда я обращаюсь к другому контроллеру (скажем, /searchAuthors.html
с использованием AuthorSearchQuery implements SearchQuery
), запрос из последнего запроса(BookSearchQuery
) все еще используется для нового контроллера, что впоследствии вызывает ClassCastException
.
Я попытался переместить аннотацию @SessionAttribute
из класса поддержки в классы реализации, но безрезультатно.
Есть ли что-то, что я делаю не так или это задумано?Что я могу сделать?
Большое спасибо!