4

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

在不将上述字段添加到我的操作类的情况下获得所需响应的任何想法。

4

2 回答 2

3

您可以使用文档的根对象部分中root指定的属性:

使用“root”属性(OGNL 表达式)指定要序列化的根对象。

在你的情况下:

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

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

于 2015-05-12T14:42:07.227 回答
0

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

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

我在我的动作类中保留了一个类型为“InputStream”的变量“inputStream”,并且在 execute() 方法中,我手动将 JSON 分配给了“inputStream”。这使我可以完全按照我的需要自定义 JSON,而这正是“inputStream”将返回的内容。

希望有帮助!

于 2015-05-12T14:01:40.223 回答