使用Struts 2中的jQuery File-Upload插件附加了额外属性的JSON响应

时间:2015-02-19 00:46:40

标签: java json servlets struts2 jquery-file-upload

我在Struts 2中使用jQuery File-Upload插件。

在我的操作中,我填充了JSON对象"results",这就是我希望我的行动返回的所有内容。

但它也包括插件的file对象,这是一个不完整的JSON,导致一切都在我的回调上中断。 (请注意,如果我不填充我的result对象,则会返回有效的JSON "file"对象。

有什么方法可以避免返回"file" JSON响应吗?我只想让我的行动只返回"results"

{
    "results": [
        {
            "ExcelPath": "/usr/test/test.xlsx",
            "ExcelName": "test.xlsx",
            "TestExcelStatus": "success"
        }
    ] 
}
{
    "file": {
        "absolute": true,
        "absoluteFile": null,
        "absolutePath": "\/usr\/local\/apache-tomcat-7.0.39\/temp"
    },
    "path": "\/usr\/local\/apache-tomcat-7.0.39\/temp\/up

我的行动如下

org.json.JSONObject resp = new JSONObject();            
JSONArray resultsArray = new JSONArray();
resp.put("results",resultsArray);
JSONObject result = new JSONObject();           
result.put("TestExcelStatus", "success");
result.put("ExcelName", this.fileFileName);
result.put("ExcelPath", fileToCreate.getPath());
resultsArray.put(result);


servletResponse.reset();
servletResponse.setHeader("Content-Type","application/json; charset=UTF-8");
servletResponse.setHeader("CacheControl","no-cache");
servletResponse.setHeader("Pragma","no-cache");
servletResponse.setHeader("Expires","-1");
//resp.writeJSONString(out);
resp.write(servletResponse.getWriter());

我希望以下行清除现有的JSON并仅返回我的"results" JSON。但它仍在回归所有事情。

servletResponse.reset();

如果没有"file",所需的JSON响应必须如下所示。

{
    "results": [
        {
            "ExcelPath": "/usr/test/test.xlsx",
            "ExcelName": "test.xlsx",
            "TestExcelStatus": "success"
        }
    ] 
}

1 个答案:

答案 0 :(得分:0)

Struts操作始终返回操作调用使用的结果代码,以执行为此操作配置的结果。我怀疑结果是json类型。

如果返回json结果的操作默认情况下root属性初始化为动作实例或模型(如果您正在使用模型驱动的操作)。

这意味着root对象的所有公共属性都将序列化为JSON。您可以使用属性上的注释来控制此过程,或者使用参数将结果配置为包含/排除结果中的某些属性。

实际上,您只需要配置结果的root参数,以返回序列化为JSON的对象。但是因为您直接写入响应,所以可以将操作返回的结果代码更改为NONE。这不会返回任何结果的操作。