栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用JSON将嵌套对象发布到Spring MVC控制器

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用JSON将嵌套对象发布到Spring MVC控制器

更新:从Spring 3.1开始,可以在@RequestBody控制器方法参数中使用@Valid。

@RequestMapping(value=”/ajax/saveVendor.do”, method = RequestMethod.POST)
public @ResponseBody AjaxResponse saveVendor( @Valid @RequestBody UIVendor vendor,
BindingResult result,
Locale currentLocale )
经过多次尝试和错误,我终于尽我所能找出问题所在。使用以下控制器方法签名时:


@RequestMapping(value=”/ajax/saveVendor.do”, method = RequestMethod.POST)
public @ResponseBody AjaxResponse saveVendor( @Valid UIVendor vendor,
BindingResult result,
Locale currentLocale )
客户端脚本必须以后数据(通常为“ application / x-www-form-urlenpred”)格式(即field = value&field2 = value2)传递对象中的字段。这是在jQuery中完成的,如下所示:

$.post( “mycontroller.do”, $.param(object), callback, “json” )
对于没有子对象或集合的简单POJO对象,这很好用,但是一旦您为传递的对象引入了极大的复杂性,Spring的映射逻辑就无法识别jQuery用于序列化对象数据的符号:

object[0][field]
我解决此问题的方法是将控制器中的方法签名更改为:

@RequestMapping(value=”/ajax/saveVendor.do”, method = RequestMethod.POST)
public @ResponseBody AjaxResponse saveVendor( @RequestBody UIVendor vendor,
Locale currentLocale )
并将呼叫从客户端更改为:

$.ajax(        {          url:"ajax/mycontroller.do",type: "POST",data: JSON.stringify( objecdt ),success: callback,dataType: "json",          contentType: "application/json"        } );

这需要使用JSON javascript库。它还将contentType强制为“ application / json”,这是Spring在使用@RequestBody批注时所期望的,并将对象序列化为Jackson可以反序列化为有效对象结构的格式。

唯一的副作用是,现在我必须在controller方法内部处理自己的对象验证,但这相对简单:

BindingResult result = new BeanPropertyBindingResult( object, “MyObject” );
Validator validator = new MyObjectValidator();
validator.validate( object, result );
如果有人对这个过程有任何改进的建议,我非常高兴。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/402528.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号