使用的情景: 在Js中想用ajax将一个 json map格式的数据传到controller,并进行解析,一直不知道怎么传过去,网上查到使用 @RequestBody 但也不知道怎么使用。后来发现,其实 @RequestBody接收的是一个Json对象的字符串,而不是一个Json对象。然而在ajax请求往往传的都是Json对象,用 JSON.stringify(data)的方式就能将对象变成字符串。同时ajax请求的时候也要指定dataType: "json",contentType:"application/json" 这样就可以轻易的将一个对象或者List传到Java端,使用@RequestBody即可绑定对象或者List.
具体看以下的代码:
(1)要传递的 data 格式
{
"ADMIN_ILLNESS_CODE": {
"fieldRuleDetail": [{
"id": "6f3c1972697e4bdd967edbc6cb90d005",
"ruleId": "d8d5dd694b7841f59f6510b945f97f5c",
"fieldName": "ADMIN_ILLNESS_CODE",
"ruleName": "非空",
"typeId": "cdab97b2544b4463b1e0c34fc32a181d",
"typeName": "非空校验",
"scriptes": "not null",
"ruleType": "1",
"deleteFlag": "0"
}, {
"id": "1543387238000",
"ruleId": "d8d5dd694b7841f59f6510b945f97f5c",
"fieldName": "ADMIN_ILLNESS_CODE",
"ruleName": "leix",
"typeId": "97992f65bcc9494d8246c3f04f7fe139",
"typeName": "长度验证",
"ruleType": "4",
"deleteFlag": "0",
"extend": "",
"scriptes": "decimal",
"isNewAdd": true
}]
},
"ADMIN_ILLNESS_NAME": {
"fieldRuleDetail": [{
"id": "03fe3b7e63fa4133b1bf66bf0066c23d",
"ruleId": "d8d5dd694b7841f59f6510b945f97f5c",
"fieldName": "ADMIN_ILLNESS_NAME",
"ruleName": "关联校验",
"typeId": "004",
"typeName": "关联校验",
"scriptes": "PT_OP_RECORD.ADMIN_ILLNESS_NAME=PT_OP_CHARGE_DETAIL.DEP_NAME",
"ruleType": "5",
"deleteFlag": "0"
}]
},
"themeName": "HEALTH_BASIC",
"modelName": "PT_OP_RECORD",
"ruleId": "d8d5dd694b7841f59f6510b945f97f5c",
"onlyId": "ADMIN_ILLNESS_CODE,CHARGE_SELF,CHARGE_TOTAL,CREATETIME$",
"scopeId": "CHARGE_SELF",
"backId": "CHIEF_COMPLAINT",
"isAdd": "null"
}
(2)ajax 代码
$.ajax({
method : "post",
url :"${ctx}/dvs/rule/saveData",
contentType:'application/json;charset=utf-8',//指定为json类型
data:JSON.stringify(fieldMap),
success : function(data){
if(data.success){
}
}
});
(3)controller 接受代码
@ResponseBody
@RequestMapping(value = "saveData")
public String saveData(@RequestBody String str, HttpServletResponse response) throws Exception {
}
(4)结果
成功将此数据传递过来,操作 str 就是操作原先的 fieldMap