WEB框架采用Spring MVC,用AJAX提交数据时,提示如下错误:
{
timestamp: "2017-06-07 18:36:10",
status: 500,
error: "Internal Server Error",
exception:"java.lang.NumberFormatException",
message:"For input string: """
path:"/security/account/save"
}
观察HTTP头部信息,发现提交数据如下:
id:8e36142e-f2a5-4c2d-a9e1-7e61f4757dce
username:admin
remarkName:系统管理员
enabled:true
accountLocked:false
roles[]:ec51190c-592a-4e41-add0-95683ed647c6
roles[]:910bc12e-27e6-4443-aa01-ae4d5f2694e2
很容易证明,错误就在“roles[]”上。
将测试数据改为如下格式,再次AJAX提交,数据转换成功
{
"roles[0]":"ec51190c-592a-4e41-add0-95683ed647c6",
"roles[1]":"910bc12e-27e6-4443-aa01-ae4d5f2694e2"
}
是的,你没有看错,Spring MVC需要的AJAX数据就是这个格式,于是很容易写出转换函数:
function encodeArray (name, value) {
if(value instanceof Array) {
let result = {}
for(let i =0, len = value.length; i < len; i ++) {
// ES6语法
result[`${name}[${i}]`] = value[i]
}
return result;
}
return ''
}
示例代码如下:
let roles = encodeArray('roles', this.roles);
_.assign(this, roles)
delete this.roles
// 提交数据
$.post(url, this, datas => {
// 处理操作成功后的数据吧
})
结论
Spring MVC直接处理AJAX提交的数组