Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 弹簧响应体的Jackson反序列化_Ajax_Json_Spring_Jackson - Fatal编程技术网

Ajax 弹簧响应体的Jackson反序列化

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),

我的示例ajax调用的Json响应主体将不会按预期进行反序列化。出于测试目的,我想返回一个空的JSON数组

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,并返回如下所示的字符串

我非常倾向于第一种方法,因为我觉得通过快速阅读代码,它会更加明显