我在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
}
如果想要获得所需的响应,请将上述字段添加到我的操作类中。
答案 0 :(得分:2)
您可以使用文档Root Object部分中指定的root
属性:
使用“root”属性(OGNL表达式)指定要序列化的根对象。
在你的情况下:
<result type="json" name="getSIMDetails">
<param name="noCache">true</param>
<param name="root">simDetails</param>
</result>
P.S:this answer可能值得一读。在该问题的另一个答案中,您还可以看到@IntelliData建议的Stream技术。
答案 1 :(得分: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'将返回的内容。
希望有所帮助!