有时代码只是比文字更好地解释事情,所以我将从一个例子开始。假设我有以下内容:
一个简单的课程Bar
:
public class Bar
{
private String key;
private String value;
// getters and setters here!
}
另一个包含Foo
List
个Bar
个对象的简单类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);
字段,但是在哪里说文件应该是这样的文件吗?
在哪里可以找到明确指定如何构造以这种方式传递给控制器方法的对象的文档?
答案 0 :(得分:2)
Bean manipulation and the BeanWrapper
以上链接可让您了解BeanWrapper
如何将RequestParam
或RequestBody
转换为Object