spring - 如何在 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";
}
.
..
...
}
如何转移对象?
解决方案
这个问题有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";
}
推荐阅读
- c++ - JSON 词法分析器应该贪心吗?
- javascript - 在struts if标签中使用javascript的返回值作为条件
- presto - 无论如何支持presto的会话级连接器配置
- python - 在python中用ODEINT求解微分方程
- android - 使用“Android Emulator Hypervisor Driver for AMD Processors”运行 android 模拟器
- r - 循环以根据 R 中的列名更正数据
- c++ - 类和模板类的不同规则?
- azure - 具有 Azure Application Insights 的迁移站点
- xml - 如何使用 XSL 转换从 SAML 响应中获取数据?
- android - 无法添加窗口 - 此窗口类型 2003 或 2006 的窗口管理器权限被拒绝