【问题标题】:JSON response appended with extra properties using jQuery File-Upload plugin in Struts 2使用 Struts 2 中的 jQuery File-Upload 插件附加额外属性的 JSON 响应
【发布时间】:2015-04-20 05:36:40
【问题描述】:

我在 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

我的Action如下:

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();

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

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

【问题讨论】:

  • 不确定这是否会有所帮助。刚刚注意到absolutePath,路径值中没有右双引号(“)。
  • 嗨 Rao,这不是问题,“绝对路径”实际上以结尾引号 (") 结尾。我想要一种方法来清除所有这些“文件”响应。如您所见,我是只需在 JSON 中添加“结果”对象

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


【解决方案1】:

Struts 操作总是返回一个结果代码,该操作调用使用该结果代码来执行配置给该操作的结果。我怀疑结果是json 类型。

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

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

其实你只需要配置结果的root参数就可以返回一个你序列化为JSON的对象。但是因为您是直接写响应,所以您可以将操作返回的结果代码更改为NONE。这由不返回任何结果的操作使用。

【讨论】:

  • 嗨 Roman,我如何将操作返回的结果代码更改为 NONE?是否有任何我需要在 struts.xml 或其他地方更改的 struts2 属性?有任何示例代码吗?
  • 好吧,按照你的建议让它工作。只是在 struts2 操作中将返回类型从“成功”更改为“无” Return Action.NONE 工作顺利,它不仅仅是返回我想要的 JSON 并且没有添加任何额外的东西。
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 2017-08-18
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
相关资源
最近更新 更多