@SessionAttributes注解用于将模型中的特定属性存储到会话(session)中,以便在多个请求之间共享。以下是一个示例代码,展示如何在Spring MVC中使用@SessionAttributes注解:

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.SessionAttributes;

@Controller
@SessionAttributes("userData")
public class UserController {

    @GetMapping("/user")
    public String getUserForm(Model model) {
        // 创建一个User对象并添加到模型中
        model.addAttribute("userData", new User());
        return "user-form";
    }

    @PostMapping("/user")
    public String submitUserForm(@ModelAttribute("userData") User user) {
        // 处理用户提交的表单数据
        // 使用@ModelAttribute注解绑定模型中的userData属性到方法参数中的User对象
        // 在这里可以对User对象进行进一步处理和持久化操作
        return "user-success";
    }
}

在上述示例中,@SessionAttributes("userData")注解将模型中名为"userData"的属性存储到会话中。这意味着当处理/user路径的请求时,模型中的"userData"属性将在多个请求之间保持一致。

getUserForm()方法中,我们向模型中添加一个名为"userData"的空User对象。该User对象将存储在会话中,并在多个请求之间共享。

submitUserForm()方法中,我们使用@ModelAttribute("userData")注解将会话中的"userData"属性绑定到方法的User参数上。这样,我们就可以访问用户在表单中提交的数据并进行进一步处理。

需要注意的是,在使用@SessionAttributes时,需要确保在每个请求处理方法中都能够访问到会话中的属性。否则,属性可能会在会话中残留或无法正确存储。

此外,还可以使用@ModelAttribute注解来从会话中获取存储的属性,如下所示:

@GetMapping("/profile")
public String getUserProfile(@ModelAttribute("userData") User user) {
    // 获取会话中的"userData"属性并进行处理
    return "profile";
}

在上述示例中,我们通过@ModelAttribute("userData")注解将会话中的"userData"属性绑定到方法的User参数上,从而可以在请求处理方法中访问该属性。

请注意,@SessionAttributes注解适用于会话级别的属性共享,在特定的会话中存储和共享数据。如果需要全局的属性共享,可以考虑使用其他机制,如数据库或缓存。