java - Spring 如何构造传递给 Controller ​​方法的对象?

标签 java jquery spring spring-mvc

有时代码比文字更能解释事情,所以我将从一个例子开始。假设我有以下内容:

示例:

一个简单的类Bar:

public class Bar
{
    private String key;
    private String value;

    // getters and setters here!
}

另一个简单的类 Foo 包含 Bar 对象的 List:

public class Foo
{
    private int id;
    private List<Bar> bars;

    // getters and setters here!
}

具有以下方法的 Spring Controller :

@RequestMapping("/save")
public void save(Foo foo)
{
    // ...
}

网页上的表单:

<form id="awesome-form">
    <input name="id" value="42">
    <input name="bars[0].key" value="A">
    <input name="bars[0].value" value="B">
    <input name="bars[1].key" value="C">
    <input name="bars[1].value" value="D">
</form>

还有一些提交该表单的 JavaScript:

$.post('/save', $('#awesome-form').serialize());

它发送的数据如下所示:

id=42&bars%5B0%5D.key=A&bars%5B0%5D.value=B&bars%5B1%5D.key=C&bars%5B1%5D.value=D

URL 解码后看起来更容易阅读,如下所示:

id=42&bars[0].key=A&bars[0].value=B&bars[1].key=C&bars[1].value=D

问题:

那么问题出在哪里呢?没有问题! (这就是问题所在......)

此代码正确构造了您期望的对象(通过查看表单),然后将其作为 foo 传递给 save 方法。这一切都非常直观,但我不明白为什么它应该有效。我一直在进行谷歌搜索,并阅读了 spring framework reference 的大部分内容。同时特别关注 web MVC framework ,但我似乎找不到解释表单输入名称所使用的符号的部分。

当然,直观上很明显,bars[0].key 指定了 bars 列表的第一个元素的 key 字段。 foo 对象,但是哪里有文档说明应该是这种情况?

问题:

在哪里可以找到明确指定如何构造以这种方式传递给 Controller ​​方法的对象的文档?

最佳答案

Bean manipulation and the BeanWrapper

上面的链接为您提供了有关 BeanWrapper 如何将 RequestParamRequestBody 转换为 Object 的一些基本概念

>

关于java - Spring 如何构造传递给 Controller ​​方法的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705153/

相关文章:

java - Autowiring Spring 3.1 独立应用程序返回 "No unique bean of type [x.x.x.x] is defined"异常

spring - 异步 REST API 生成警告

java - 如何禁用 Vaadin 表延迟加载

java - 在 ListView 中显示数据库中的数据

javascript - 如何将工具提示转换为 highcharts 中的 onclick 事件?

javascript - 在 SweetAlert 中传递 ASP.NET 按钮单击事件

spring - 是否有任何可能的方法可以忽略 JPA Example Matcher 的所有路径

java - 检索在运行时执行 java.security.PrivilegedAction 的 Subject

java.lang.ClassCastException : android. 小部件.TextView。为什么我会得到这个?

javascript - 投资组合网站上的图标消失