一直以为在SpringMVC环境中,@RequestBody接收的是一个json对象,调试代码时没有成功,后来才发现,其实 @RequestBody接收的是一个json字符串,而不是一个json对象。
解决方案:用JSON.stringify(data)的方式将对象变成字符串,同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" ,这样就可以轻易的将一个对象传到Java端,使用@RequestBody即可绑定对象。
contentType:默认为"application/x-www-form-urlencoded",该默认值适合大多数应用场合。"application/json"表明参数是json字符串。
dataType: 预期服务器返回的数据类型。可用的类型如下:
- xml:返回XML文档,可用JQuery处理;
- html:返回纯文本HTML信息;包含的script标签会在插入DOM时执行;
- script:返回纯文本JavaScript代码,不会自动缓存结果,除非设置了cache参数,注意在远程请求时(不在同一个域下),所有post请求都将转为get请求;
- json:返回JSON数据;
- jsonp:JSONP格式。使用SONP形式调用函数时,例如myurl?callback=?,JQuery将自动替换后一个 “?”为正确的函数名,以执行回调函数;
- text:返回纯文本字符串。
js代码:
$.ajax({
url : context + "/service/message/saveZbl",
data :JSON.stringify({"uuid":uuid,"tableName":tableName,"columnName":columnName}),
dataType: "json",
contentType:"application/json",
type:"POST",
success : function(data){
if(data > 0){
dialog.close();
dialog.remove();
return false;
}else{
$.sticky(
"保存失败",
{
style : 'success',
autoclose : 1000,
position : 'center'
});
}
}
});
Java代码:
@RequestMapping(value = "/saveZbl")
@ResponseBody
public int saveZbl(HttpServletRequest request,@RequestBody JcZntxZbb zbb) {
return 1;
}