Java Spring如何构造传递给其控制器方法的对象?
有时代码比文字更能解释事物,所以我将从一个例子开始。假设我有以下几点: 例子: 一个简单的类Java Spring如何构造传递给其控制器方法的对象?,java,jquery,spring,spring-mvc,Java,Jquery,Spring,Spring Mvc,有时代码比文字更能解释事物,所以我将从一个例子开始。假设我有以下几点: 例子: 一个简单的类Bar: 公共类栏 { 私钥; 私有字符串值; //这里有能手和二传手! } 另一个简单的类Foo,包含Bar对象的列表: 公共类Foo { 私有int-id; 私人酒吧名单; //这里有能手和二传手! } 采用以下方法的弹簧控制器: @RequestMapping(“/save”) 公共作废保存(Foo-Foo) { // ... } 网页上的表格: 还有一些提交表单的javascript:
Bar
:
公共类栏
{
私钥;
私有字符串值;
//这里有能手和二传手!
}
另一个简单的类Foo
,包含Bar
对象的列表:
公共类Foo
{
私有int-id;
私人酒吧名单;
//这里有能手和二传手!
}
采用以下方法的弹簧控制器:
@RequestMapping(“/save”)
公共作废保存(Foo-Foo)
{
// ...
}
网页上的表格:
还有一些提交表单的javascript:
$.post('/save',$('#awesome form').serialize();
它发送的数据如下所示:
id=42&bar%5B0%5D。key=A&bar%5B0%5D。value=B&bar%5B1%5D。key=C&bar%5B1%5D。value=D
当URL解码后看起来更可读,如下所示:
id=42&bar[0]。key=A&bar[0]。value=B&bar[1]。key=C&bar[1]。value=D
问题:
那有什么问题?没问题!(这就是问题所在……)
这段代码正确地构造了您期望的对象(通过查看表单),然后将该对象作为foo
传递给save
方法。这是非常直观的,但我不明白为什么它应该工作。我一直在谷歌上搜索,阅读了其中的大部分内容,同时特别关注了,但我似乎找不到解释表单输入名称所用符号的部分
当然,直观地看,bar[0].key
指定foo
对象的bar
列表的第一个元素的key
字段,但是说明这种情况的文档在哪里
问题:
在哪里可以找到明确指定如何构造以这种方式传递给控制器方法的对象的文档?
上面的链接为您提供了一些关于如何将BeanWrapper
转换为RequestParam
或RequestBody
到对象的基本概念,您需要转换服务。也许这个页面对您有所帮助:@chrylis我知道转换服务可以用于将简单对象转换为复杂对象,比如将String
转换为Date
,但这与Spring从x-www-form-urlencoded数据反序列化复杂对象的固有能力有什么关系?也许你能给我指出一些具体的文档吗?@john16384谢谢你的链接,但我确实认为它只涉及表单应该如何编码(以及它们如何最终成为x-www-form-urlencoded数据),而没有具体说明Java和Spring如何能够将其反序列化为对象。除非我在浏览链接时遗漏了什么,否则请务必让我知道。也许这会对你有所帮助