Spring如何构造它传递给控制器​​方法的对象?

时间:2017-03-09 20:50:37

标签: java jquery spring spring-mvc

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

实施例

一个简单的课程Bar

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

    // getters and setters here!
}

另一个包含Foo ListBar个对象的简单类public class Foo { private int id; private List<Bar> bars; // getters and setters here! }

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

使用以下方法的Spring控制器:

<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>

网页上的表单:

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

一些提交该表单的javascript:

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

发送如下所示的数据:

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

当URL解码时看起来更具可读性:

foo

问题:

那么问题是什么?没有问题! (那就是问题......)

此代码正确构造了您期望的对象(从查看表单),然后将其作为save传递给bars[0].key方法。这一切都非常直观,但我无法弄清楚为什么它应该起作用。我一直在公平分享谷歌搜索,并阅读spring framework reference的很大一部分,同时特别关注web MVC framework,但我似乎无法找到该部分这解释了表单输入名称使用的符号。

当然,直截了当地明确key指定bars对象的foo列表的第一个元素的assertThat(aCollection).extracting("expectedNullField") .containsOnly(null, null, null); 字段,但是在哪里说文件应该是这样的文件吗?

问题:

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

1 个答案:

答案 0 :(得分:2)

Bean manipulation and the BeanWrapper

以上链接可让您了解BeanWrapper如何将RequestParamRequestBody转换为Object

的基本概念