有时代码比文字更能解释事情,所以我将从一个例子开始。假设我有以下内容:
示例:
一个简单的类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
如何将 RequestParam
或 RequestBody
转换为 Object
的一些基本概念
关于java - Spring 如何构造传递给 Controller 方法的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42705153/