2012-04-10 51 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