我有一个Spring Boot Webapp,其中多个控制器在单个ProductDto
对象上运行。完成所有操作后,DTO将保留下来,而是创建一个空白的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
,并且不会通过会话传输任何状态。
我在这里做错了什么?以及如何使这种情况在每个控制器中都没有重复代码的情况下起作用?