@SessionAttributes

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

以下示例使用了 @SessionAttributes 注解:

Java
@Controller
@SessionAttributes("pet") (1)
public class EditPetForm {
	// ...
}
1 Using the @SessionAttributes annotation.
Kotlin
@Controller
@SessionAttributes("pet") (1)
class EditPetForm {
	// ...
}
2 Using the @SessionAttributes annotation.

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

Java
@Controller
@SessionAttributes("pet") (1)
public class EditPetForm {

	// ...

	@PostMapping("/pets/{id}")
	public String handle(Pet pet, BindingResult errors, SessionStatus status) {
		if (errors.hasErrors) {
			// ...
		}
		status.setComplete(); (2)
		// ...
	}
}
1 将 `Pet`值存储在 Servlet 会话中。
2 从 Servlet 会话中清除 `Pet`值。
Kotlin
@Controller
@SessionAttributes("pet") (1)
class EditPetForm {

	// ...

	@PostMapping("/pets/{id}")
	fun handle(pet: Pet, errors: BindingResult, status: SessionStatus): String {
		if (errors.hasErrors()) {
			// ...
		}
		status.setComplete() (2)
		// ...
	}
}
3 将 `Pet`值存储在 Servlet 会话中。
4 从 Servlet 会话中清除 `Pet`值。