首页 > 解决方案 > 如何在 spring-boot Web 应用程序中将对象或数据从一个控制器传递到另一个控制器?

问题描述

我想从用户输入中获取一些数据,然后我想在它们之间传输这些数据。但是为了安全起见controllers,这种传输必须在后台完成。我不想在 URL 上发送参数。

我想将在page1控制器中创建的用户对象发送到page2. 我为此使用了模型方法,但没有成功。

@Controller
public class DemoController {
...
..
.

@GetMapping("/page1")
public String page1(Model model) {

    User user = new User();
    user.setName("TestName");
    user.setSurname("TestSurname");
    user.setMail("xyzabc@gmail.com");

    model.addAttribute("user", user);
    return "redirect:/page2";
}

@GetMapping("/page2")
public String page2(@ModelAttribute("user") User user, Model model) {

    System.out.println(user.toString());
    return "page2";
}

.
..
...
}

如何转移对象?

标签: springspring-boot

解决方案


这个问题有2个解决方案:

解决方案1:将对象存储在session

代码示例:

@GetMapping("/page1")
public String page1(Model model, HttpSession session) {
   ...

   session.setAttribute("user", user);
   return "redirect:/page2";
}

@GetMapping("/page2")
public String page2(Model model, HttpSession session) {
    User user = null;
    if (session.getAttribute("user") != null) {
        user = (User) session.getAttribute("user");
        System.out.println(user.toString());
    }
    return "page2";
}

解决方案2:使用转发而不是重定向

代码示例:

@GetMapping("/page1")
public String page1(Model model) {
    ...
    model.addAttribute("user", user);
    return "forward:/page2";
}

推荐阅读