Spring将对象从视图发送到控制器
Posted
技术标签:
【中文标题】Spring将对象从视图发送到控制器【英文标题】:Spring sending object from view to a controller 【发布时间】:2021-09-15 00:30:15 【问题描述】:如何将对象从视图发送到控制器?
我首先使用控制器 1 在使用 Thymeleaf 的视图 1 上显示此对象,该对象是 $object
。然后我想要做的是单击一个按钮并将这个对象发送回控制器 2,以便我可以将同一对象从视图 1 显示到视图 2。你是怎么做到的,你能给我一个例子吗?
现在我可以使用 URL 中对象的 ID 来执行此操作,然后在控制器 2 中请求参数,然后根据 ID 获取对象。但是我不想在 URL 中看到对象 ID,还有什么方法?
【问题讨论】:
javaguides.net/2019/04/… 对不起,这对我没有帮助,我说我已经可以使用 URL 中对象的 ID,然后使用 @PathVariable 提取它我要问的是如何传输在没有看到 ID 或 URL 中对象的任何内容的情况下查看控制器? 看起来你有任何选择。您必须基于某些东西来获取对象。至少一个标识符。 【参考方案1】:如果您不想在 URL 中使用 id,那么您可以创建一个带有隐藏字段的表单并将其提交给您的控制器。
<form th:object="$formData" method="post">
<input type="hidden" th:field="*id">
<button type="submit">
</form>
使用这样的控制器:
@Controller
public class MyController
@GetMapping
public String showPage(Model model)
model.addAttribute("formData", new MyFormData("someId"));
return "myTemplate";
@PostMapping
public String handleId(@ModelAttribute("formData") MyFormData formData)
String id = formData.getId();
// do something with id here
但您似乎对这个要求有点困难。您不想在 URL 中显示 id 的任何特殊原因?
【讨论】:
我想阻止其他用户编辑其他用户的对象,例如,我有一个向用户添加书籍的表单 /addBook/user_id 我不希望其他用户使用其他用户的 URL id 为他添加书籍。有更好的做法吗? 这种方法不能替代安全性。在浏览器中使用“查看源代码”时,他们可以看到隐藏输入的值。您需要为您的应用程序添加安全性(通常通过 Spring Security 用于 Spring Boot 应用程序)并通过@AuthenticationPrincipal
检索登录用户。不要依赖 URL 中的用户 ID 或隐藏的输入来了解当前登录的用户。以上是关于Spring将对象从视图发送到控制器的主要内容,如果未能解决你的问题,请参考以下文章
Spring 和 Thymeleaf:将对象从 th:each 表发送到控制器