【问题标题】:spring MVC request param auto mapping complex objectspring MVC请求参数自动映射复杂对象
【发布时间】:2017-03-21 14:24:28
【问题描述】:

我在这里看到了类似的答案:

Spring MVC: Complex object as GET @RequestParam

Spring map GET request parameters to POJO automatically

我真的找不到这方面的文档,因为这个自动映射甚至不是由任何注释完成的。 (实际上它甚至不需要@RequestParam

1) 到目前为止,我只看到简单的映射,对象包含所有原始数据,如果我的请求是一个包含多个级别属性的复杂 JSON 对象(一个对象包含其他对象)怎么办?自动映射是否仍然有效?

2) 到目前为止我只看到 Spring 控制器可以接收一个自动映射对象,我可以让它自动映射多个对象吗?例如:

public @ResponseBody List<MyObject> myAction(MyObject myObject,
MyObject2 myObject2) { ... }

有谁知道描述映射在幕后如何工作的文档在哪里?根据我的第二个问题,如果 Spring 允许这样做,如果我在 MyObjectMyObject2 中具有相同的属性名称怎么办,映射将如何进行?

【问题讨论】:

  • 1.是的 2. 取决于。编组 JSON 和映射请求参数之间存在差异,这是一个巨大的差异。基本上所有这些都在 Spring 参考指南中进行了解释,我建议你阅读一下。
  • 我认为RequestMapping 应该在docs.spring.io/spring/docs/current/javadoc-api/org/… 中有很好的记录,但我真的找不到任何线索。
  • 我真的无法理解这个There is a difference between marshaling JSON and mapping request parameters it is a HUGE difference 你介意分享一个链接吗?如果有帮助,您可以在下面回答。谢谢。
  • 正如我所说,绑定(依赖于请求参数)和编组请求正文之间存在差异。如前所述,所有这些都记录在 spring 参考指南中。

标签: java spring spring-mvc jakarta-ee


【解决方案1】:

如果你这样做:

public @ResponseBody List<MyObject> myAction(@RequestBody MyObject myObject) { ... }

当然,你的 http 请求中只能有一个正文。

只要您的类路径中有 Jackson(spring boot 会自动添加它),您的对象就会被正确编组。

如果您的正文中的 JSON 不正确,您将收到 400(无效请求)返回。

【讨论】:

    猜你喜欢
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多