2012-04-10 55 views
5

我具有以下實施爲包括在JSON響應父類字段如何使用撐杆2 JSON插件

public abstract class BaseAcion extends ActionSupport { 
    private String result; 
    private String message; 

    //getters, setters 
} 

public class MyAction extends BaseAction { 
    private String myFirstField; 
    private String mySecondField; 

    public String execute() { 
     ... 
     myFirstField = "someValue"; 
     mySecondField = "someOtherValue"; 
     ... 
     result = SUCCESS; 
     message = "Some message here"; 
     ... 
     return result; 
    } 

    //methods, getters, setters 
} 

我已經使用struts2的JSON的插件,動作映射是

<package name="my-package" namespace="/" extends="json-default" > 
    <action name="myAction" class="MyAction"> 
     <result type="json"></result> 
    </action> 
</package> 

的響應,我接收是這樣的。

{ 
    "myFirstField":"someValue", 
    "mySecondField":"someOtherValue" 
} 

我也希望得到「結果」和「消息」字段作爲迴應。

如何在JSON響應中包含BaseAction字段?

回答

11

通過在「根」對象的基類定義的默認屬性將不被序列化,在所有基類序列化性質(高達對象)在JSON結果集「ignoreHierarchy」爲false:

<result type="json"> 
    <param name="ignoreHierarchy">false</param> 
</result> 

詳細的東西請參閱JSON插件文檔

+0

謝謝。但它會序列化父項的所有屬性。我只想在json中的父項的兩個屬性。我想我必須在每個操作映射中使用「excludeProperties」。有沒有更清潔的方法? – 2012-04-10 07:03:42

+1

是的,這是排除他們的方法否則在Action中創建一個內部類,該類僅包含要包含在JSON中的信息並將其設置爲要編組的基礎/根對象。 – 2012-04-10 07:20:54

+0

而不是在每個動作中創建內部類,我認爲最好以我自己的方式擴展JSON結果類型。我將深入探討json插件。感謝Umesh提供寶貴的解決方案和想法。 – 2012-04-10 09:29:16