如何在 struts2 操作中忽略根 JSON 节点

How to ignore the root JSON node in struts2 action

我在 struts 操作中添加了这个方法,

public String execute() {
    long start = System.currentTimeMillis();
    simDetails = new SIMDetails();
    return GET_SIM_DETAILS;
}

并在 struts 配置文件中添加了以下操作,

<result type="json" name="getSIMDetails">
    <param name="noCache">true</param>
    <param name="includeProperties">simDetails.*</param>
</result>

然后我得到了低于JSON的回应

{
    "simDetails": {
        "void": null,
        "ban": null,
        "currentTariff": null,
        "currentTariffDescription": null,
        "defaultTariff": null,
        "defaultTariffDescription": null,
        "imsi": null,
        "packageItemId": null,
        "simSerialNumber": null,
        "simStatus": null,
        "simStatusCC": null,
        "status": null,
        "subscriberNumber": null,
        "subsidaryCode": null
    }
}

但我需要这个回复而不是上面的回复,

{
    "void": null,
    "ban": null,
    "currentTariff": null,
    "currentTariffDescription": null,
    "defaultTariff": null,
    "defaultTariffDescription": null,
    "imsi": null,
    "packageItemId": null,
    "simSerialNumber": null,
    "simStatus": null,
    "simStatusCC": null,
    "status": null,
    "subscriberNumber": null,
    "subsidaryCode": null
}

如果不将上述字段添加到我的操作中,想获得所需的响应 class。

为了避免你同样的问题,我通常 return JSON 使用以下 struts.xml (而不是 JSON return 类型) :

                <result name="success" type="stream">
                    <param name="contentType">text/html</param>
                    <param name="inputName">inputStream</param>
                </result>

我在我的操作 class 中保留了一个类型 'InputStream' 的变量 'inputStream',并且在 execute() 方法中,我手动将 JSON 分配给 'inputStream'。这使我可以完全按照自己的意愿自定义 JSON,而这正是 'inputStream' 将 return.

希望对您有所帮助!

您可以使用文档 Root Object 部分中指定的 root 属性:

Use the "root" attribute(OGNL expression) to specify the root object to be serialized.

你的情况:

<result type="json" name="getSIMDetails">
    <param name="noCache">true</param>
    <param name="root">simDetails</param>
</result>

P.S:this answer 可能值得一读。在该问题的另一个答案中,您还可以看到@IntelliData 建议的 Stream 技术。