如何将 ajax 中的 FormData 和 JSON 对象传递给 Spring MVC 控制器?
How to pass FormData and JSON object in ajax to Spring MVC Controller?
我需要在 ajax 调用中传递 FormData 和 JSON 对象,但我收到 400 Bad Request 错误。
[artifact:mvn] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unexpected character ('-' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value
[artifact:mvn] at [Source: java.io.PushbackInputStream@3c0d58f6; line: 1, column: 3]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('-' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value
[artifact:mvn] at [Source: java.io.PushbackInputStream@3c0d58f6; line: 1, column: 3]
JS:
var formData = new FormData(form[0]);
//form JSON object
var jsonData = JSON.stringify(jcArray);
$.ajax({
type: "POST",
url: postDataUrl,
data: { formData:formData,jsonData:jsonData },
processData: false,
contentType: false,
async: false,
cache: false,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
success: function(data, textStatus, jqXHR) {
}
});
控制器:
@RequestMapping(value="/processSaveItem",method = RequestMethod.POST")
public @ResponseBody Map<String,String> processSaveItem(
@RequestBody XYZClass result[])
}
有类似的问题,jquery sending form data and a json object in an ajax call,我也在尝试同样的方法。
如何在单个 ajax 请求中同时发送 FormData 和 JSON 对象?
你可以这样通过
postdata={};
postdata.formData=formData;
postData.jsonData=jsonData
$.ajax({
type: "POST",
url: postDataUrl,
data: { postdata},
processData: false,
contentType: false,
async: false,
cache: false,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
success: function(data, textStatus, jqXHR) {
}
});
和控制器端你可以识别数据。
我通过在 ajax POST.POST 中附加带有 FormData 对象的 JSON 字符串解决了这个问题。
var jsonObjectData = JSON.stringify(jcArray);
formData.append("jsonObjectData",jsonObjectData);
并且在控制器中,您可以像访问其他表单数据值一样以正常方式访问它。
request.getParameter("jsonObjectData");
现在您将拥有字符串化 JSON,您可以将 json 解析为 Java 对象
How to parse a JSON string to an array using Jackson.
您可以执行以下操作以在 Ajax 调用中传递表单数据。
var formData = $('#client-form').serialize();
$.ajax({
url: 'www.xyz.com/index.php?' + formData,
type: 'POST',
data:{
},
success: function(data){},
error: function(data){},
})
我需要在 ajax 调用中传递 FormData 和 JSON 对象,但我收到 400 Bad Request 错误。
[artifact:mvn] org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver - Failed to read HTTP message: org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Unexpected character ('-' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value
[artifact:mvn] at [Source: java.io.PushbackInputStream@3c0d58f6; line: 1, column: 3]; nested exception is com.fasterxml.jackson.core.JsonParseException: Unexpected character ('-' (code 45)) in numeric value: expected digit (0-9) to follow minus sign, for valid numeric value
[artifact:mvn] at [Source: java.io.PushbackInputStream@3c0d58f6; line: 1, column: 3]
JS:
var formData = new FormData(form[0]);
//form JSON object
var jsonData = JSON.stringify(jcArray);
$.ajax({
type: "POST",
url: postDataUrl,
data: { formData:formData,jsonData:jsonData },
processData: false,
contentType: false,
async: false,
cache: false,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
success: function(data, textStatus, jqXHR) {
}
});
控制器:
@RequestMapping(value="/processSaveItem",method = RequestMethod.POST")
public @ResponseBody Map<String,String> processSaveItem(
@RequestBody XYZClass result[])
}
有类似的问题,jquery sending form data and a json object in an ajax call,我也在尝试同样的方法。
如何在单个 ajax 请求中同时发送 FormData 和 JSON 对象?
你可以这样通过
postdata={};
postdata.formData=formData;
postData.jsonData=jsonData
$.ajax({
type: "POST",
url: postDataUrl,
data: { postdata},
processData: false,
contentType: false,
async: false,
cache: false,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
success: function(data, textStatus, jqXHR) {
}
});
和控制器端你可以识别数据。
我通过在 ajax POST.POST 中附加带有 FormData 对象的 JSON 字符串解决了这个问题。
var jsonObjectData = JSON.stringify(jcArray);
formData.append("jsonObjectData",jsonObjectData);
并且在控制器中,您可以像访问其他表单数据值一样以正常方式访问它。
request.getParameter("jsonObjectData");
现在您将拥有字符串化 JSON,您可以将 json 解析为 Java 对象
How to parse a JSON string to an array using Jackson.
您可以执行以下操作以在 Ajax 调用中传递表单数据。
var formData = $('#client-form').serialize();
$.ajax({
url: 'www.xyz.com/index.php?' + formData,
type: 'POST',
data:{
},
success: function(data){},
error: function(data){},
})