@SessionAttributes 是用来在请求之间的 HTTP Servlet 会话中存储模型属性。它是一个类级别的注解,声明了特定控制器所使用的会话属性。这通常列出了模型属性的名称或模型属性的类型,它们应该被透明地存储在会话中,供后续请求访问。

    下面的例子使用了 @SessionAttributes 注解:

    1. @Controller
    2. @SessionAttributes("pet")
    3. public class EditPetForm {
    4. // ...
    5. }

    在第一个请求中,当一个名称为 pet 的模型属性被添加到模型中时,它被自动提升并保存在 HTTP Servlet 会话中。它一直在那里,直到另一个控制器方法使用 SessionStatus 方法参数来清除存储,如下面的例子所示:

    1. @Controller
    2. @SessionAttributes("pet") // 在 session 中存储 pet
    3. public class EditPetForm {
    4. // ...
    5. @PostMapping("/pets/{id}")
    6. public String handle(Pet pet, BindingResult errors, SessionStatus status) {
    7. if (errors.hasErrors) {
    8. // ...
    9. }
    10. status.setComplete(); // 清除 session 中的 pet 值
    11. // ...
    12. }
    13. }