У меня есть веб-приложение Spring Boot, в котором несколько контроллеров работают с одним ProductDto
объектом.Как только они все сделаны, DTO сохраняется, и вместо этого создается пустой.
То, как это работает для меня, заключается в том, что в каждом контроллере, который работает на ProductDto
, я добавляю это:
/* Kotlin code */
@Controller
@SessionAttributes("productDto")
class SomeController {
@ModelAttribute("productDto")
fun getProductDto() = ProductDto()
/* ... */
}
Как только ProductDto
сохраняется, я вызываю sessionStatus.setComplete()
, и он работает как нужно.
Я хочу иметь возможность объявить этот атрибут сеанса только один раз и только для определенных контроллеров..
Я попытался аннотировать ProductDto
с помощью @SessionScope
, а затем создать ControllerAdvice
:
/* Kotlin code */
@ControllerAdvice(assignableTypes = [ /* List of controller classes */ ])
class SomeControllerAdvice {
@ModelAttribute("productDto")
fun getProductDto() = ProductDto()
}
, но каждый контроллер получает пустое значение ProductDto
, и ни одно состояние непередано через сеанс.
Что я здесь не так делаю?И как заставить этот сценарий работать без дублирования кода на каждом контроллере?