我提交给控制器的表格工作正常,控制器签名:
@RequestMapping(value = "/Save", method = RequestMethod.POST)
public ModelAndView save(@ModelAttribute MyDTO myDTO) {}
我有另一个控制器方法来处理带有此签名的ajax请求:
@RequestMapping(value = "/Preview", method = RequestMethod.POST)
public ModelAndView preview(@RequestBody MyDTO myDTO) {}
但是,提交序列化表单会返回以下错误:org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "myList[0]" (Class myPackage.dto.MyDTO), not marked as ignorable
javascript / jquery是:
var json = jq("#dtoForm").serializeObject();
json = JSON.stringify(json);
jq.ajax({
cache:false,
type: 'POST',
url: "${Preview}",
data:json,
contentType: "application/json",
success: function(data) {
previewDialog.html(data);
previewDialog.dialog('open');
}
});
我错过了什么?我很困惑,因为当没有转换json时,表单提交正确(dto正确映射)。除其他外,dto包含一个列表。
修改如果我按照springsource的建议删除了json = JSON.stringify(json);
我得到了一个稍微不同的错误(dto中的一个字段称为“标题”):
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Unrecognized token 'til': was expecting 'null', 'true' or 'false'
答案 0 :(得分:0)
如果其他人有同样的问题,我从这里得到了代码:http://code.google.com/p/form2js/ 包含了libs,并将我的代码更改为:
var json = jq("#dtoForm").toObject(); //the new lib I dl'd from link
json = JSON.stringify(json);
...
//and then to do the same ajax call
但是,它并没有完全解决,因为spring-mvc表单为每个复选框创建了一个隐藏的表单元素,然后我手动删除:
delete json._MyBoolean;
一个旁注,这一切看起来都很混乱 - 不应该spring / jackson能够将pojo的转换为html形式和json在两个方向上没有所有这些额外的东西。
(原始堆栈参考库是here)