2015-05-12 27 views
3

我在Struts動作添加了此方法,如何忽略Struts2的行動根JSON節點

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

如果您使用' simDetails'(並刪除includeProperties)會得到什麼? –

+0

P.S:你有[Cletus](http://stackoverflow.com/users/18393/cletus)相同的確切頭像...... –

+1

它按要求工作。非常感謝,你可以添加它作爲接受它的答案 –

回答

2

可以使用root屬性作爲文檔的Root Object部分中指定:

使用的「根」的屬性(OGNL表達),以指定根對象被序列化。

你的情況:

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

P.S:this answer可能是值得一讀的。在這個問題的另一個答案中,您還可以看到由@IntelliData建議的流技術。

+0

如果我使用' dLink'它返回我** null **,並且''工作,我不想要所有的屬性作爲迴應,爲什麼這是如此,任何建議,請 –

+0

當然;)這是因爲你的變量有一個單字母長的第一個字,而Eclipse生成getter'getdLink'像Struts2一樣需要'getDLink'。只需在'public String getDLink(){return dLink;}'手動修改getter就可以了。哦,並考慮upvoting這個答案,謝謝@shantaram_t。 –

+0

相關:https://stackoverflow.com/a/27928298/1654265 –

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'將返回的內容。

希望有幫助!