java - 接收 json 数据时出现 JSON 解析错误
问题描述
您好我正在尝试将 JSON 数组从 POST 发送到 Spring 后端。
在我的 Javascript 中:
$('#tblfilelisting tbody tr').each(function () {
var namerecord = {
No: $(this).find('.assignindex').text().trim(),
Name: $(this).find('.getname').val(),
File: $(this).find('.getfilename').text().trim(),
Status: $(this).find('.radioname:checked').val()
};
nameList.push(namerecord);
});
var jasonData = new FormData();
jasonData.append('arrStr', JSON.stringify(nameList));
$.ajax({
type: 'POST',
url: '/api/CheckValidateBeforeSave',
data: jasonData,
contentType: 'application/json',
processData: false,
beforeSend: function () {
//
},
success: function (data) {
if (data.code != '200') {
return false;
}
var get = data.jasonResult;
for (var i = 0; i < get.length; i++) {
appendResultResponse(get.No[i], get.Name[i], get.File[i], get.Status[i], get.Result[i]);
appendErrorMess(get.No[i], get.hasDuplicated[i]);
}
$('#uploadFileConfirmation').modal('show');
},
error: function (err) {
//
},
});
在我的 REST 控制器中,我有:
@PostMapping(value = "/CheckValidateBeforeSave", produces = "application/json", consumes = "application/json")
@ResponseBody
public FileManagement CheckValidateBeforeSave(@RequestBody FileManagement fileManagement) {
fileManagementService.checkMultipleFiles(fileManagement);
return fileManagement;
}
但我得到的错误是:JSON解析错误:数值中的意外字符('-'(代码45)):预期数字(0-9)跟随减号,用于有效数值;嵌套异常是 com.fasterxml.jackson.core.JsonParseException:数值中的意外字符('-'(代码 45)):预期数字(0-9)跟随减号,对于有效数值
但我的 POST 请求没有 - 标志:
------WebKitFormBoundaryId7kxO7B9rozEwHv Content-Disposition: form-data; 名称="arrStr"
[{"No":"1","Name":"dd","File":"Test PDF 2.pdf","Status":"on"}] ------WebKitFormBoundaryId7kxO7B9rozEwHv-- line-真棒.woff2?v=1.1。CheckValidateBeforeSave common.js util.js AuthenticationService.Authenticate?1shttp%3A%2F%2F…zaSyBTGnKT7dt597vo9QgeQ7BFhvSRP4eiMSM&token=29026
请帮忙。谢谢。
解决方案
您得到的原因JSON parse error
是您实际上并没有发送 JSON 格式的数据。相反,您的数据具有 FormData 格式。
有两种方法可以修复它。
1.您只需要发送nameList
data: JSON.stringify(nameList)
2. 您想将其作为 FormData 发送(可选连同其他数据)
data: {formdata: jasonData, var2: "other data"}