Ajax 弹簧响应体的Jackson反序列化
我的示例ajax调用的Json响应主体将不会按预期进行反序列化。出于测试目的,我想返回一个空的JSON数组Ajax 弹簧响应体的Jackson反序列化,ajax,json,spring,jackson,Ajax,Json,Spring,Jackson,我的示例ajax调用的Json响应主体将不会按预期进行反序列化。出于测试目的,我想返回一个空的JSON数组 JavaScript: JSON-Ajax-Call saveFiles: function (files) { $.ajax({ url: "SaveFile.do", type: "post", data: JSON.stringify(files),
JavaScript: JSON-Ajax-Call
saveFiles: function (files) {
$.ajax({
url: "SaveFile.do",
type: "post",
data: JSON.stringify(files),
contentType: "application/json",
success: function (saved) {
showSaveResult(saved);
}
});
},
Java-Controller:
@RequestMapping(value="/SaveFile.do", method = RequestMethod.POST)
@ResponseBody public ArrayNode createSaveResult (@RequestBody Data[] entities, BindingResult result, Locale locale){
ArrayNode jsonReturn = new ArrayNode(jsonNodeFactory);
return jsonReturn;
}
Request:
[{key:value1},{key:value2}]
Response:
{"array":true,"elements":[],"containerNode":true,"valueAsText":null,"numberType":null,"fields":[],"fieldNames":[],
"null":false,"textValue":null,"booleanValue":false,"long":false,"valueNode":false,"missingNode":false,
"object":false,"pojo":false,"number":false,"integralNumber":false,"floatingPointNumber":false,"int":false,
"double":false,"bigDecimal":false,"bigInteger":false,"textual":false,"boolean":false,"binary":false,
"numberValue":null,"intValue":0,"longValue":0,"bigIntegerValue":0,"doubleValue":0.0,"decimalValue":0,
"binaryValue":null,"valueAsInt":0,"valueAsLong":0,"valueAsDouble":0.0,"valueAsBoolean":false}
相反,响应传递完整的ArrayNode对象。如何解决此问题?ArrayNode是数组中单个元素的Jackson表示。如果您只是返回它,您将得到ArrayNode的序列化版本,而不是您想要的空数组元素
您可以返回表示预期数据集的类:
private static class SaveResult {
String key;
String value;
}
@ResponseBody public SaveResult[] createSaveResult (@RequestBody Data[] entities, BindingResult result, Locale locale){
return new SaveResult[0];
}
您还可以手工构建Json,并返回如下所示的字符串
我非常倾向于第一种方法,因为我觉得通过快速阅读代码,它会更加明显