如何在 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 技术。
我在 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 技术。