详解struct2配置json

使用struct2返回json之前需要加struts2-json-plugin-2.3.x.jar、json-lib-2.3-jdk15.jar两个jar包,不然会出错。这里不解释Action类是如何写的,先填上Action代码。下面只是做了一个很简单的操作。主要是申明了一个实体和两个变量,在方法里分别给它们附上值。

 

@Controller
public class LoginAction extends BaseAction {

    private static final long serialVersionUID = 1L;
    static Logger logger = Logger.getLogger(LoginAction.class.getName());

    //--->在struct2配置文件中配置与这些变量名相同的属性
    private String message;
    private boolean success;
    private User user;

    public String doLogin() {
        User user = new User();
        user.setName("chen2014");
        user.setAge("20");
        user.setSex("男");
        this.setSuccess(true);
        this.setMessage("登录成功!");
        this.setUser(user);//--->一个实体对象,struct2内部应该会将实体转换为json
        return SUCCESS;
    }

    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public boolean isSuccess() {
        return success;
    }
    public void setSuccess(boolean success) {
        this.success = success;
    }
public User getUser() { return user; } public void setUser(User user) { this.user = user; } }

 

在struct2的配置中要将标签package下的extends的属性值设置json-default,然后将result标签的type的属性值设置为json。接下来就来详细看看param标签的配置了。

经过多次测试,发现 <param name="root"></param> 与<param name="includeProperties"></param>标签无法同时使用。不会抛出异常,但是会返回一个空json。

下面配置param标签的name属性值为root,内容为user。该user就是映射着Action类中的user变量。

<package name="json" extends="json-default">  
        <action name="login" class="com.o2cafe.action.LoginAction" method="doLogin">               
            <result type="json">  
                    <!-- user映射LoginAction中的user变量 -->
                    <param name="root">user</param>
            </result>  
        </action>  
 </package>      


返回的json为:

{"age":"20","contact":null,"isDeleted":null,"name":"chen2014","orderList":null,"passWord":null,"role":null,"sex":"男","userID":null,"userName":null,"workTime":null}

 

你会发现返回的json中很多的数据是空的,配置param标签的name属性值为excludeNullProperties,内容为true。可以过滤掉一些值为null的属性。

<package name="json" extends="json-default">  
        <action name="login" class="com.o2cafe.action.LoginAction" method="doLogin">               
            <result type="json">          
                    <param name="root">user</param>
                    <param name="excludeNullProperties">true</param>  
            </result>  
        </action>  
 </package>  

 

返回的json为:

{"age":"20","name":"chen2014","sex":"男"}

 

wrapPrefix 属性json结果开头添加xx(比如 [),wrapSuffix属性会在结尾添加xx (比如 ]) 添加后原来的json就变成 [{"age":"20","name":"chen2014","sex":"男"}]

还可以配置<param name="includeProperties"></param>来返回json数据,使用excludeProperties属性来过滤掉一些不想要的属性。跟上面的root比效果差不多,我觉得二选一就可以了。

<package name="json" extends="json-default">  
        <action name="login" class="com.o2cafe.action.LoginAction" method="doLogin">               
            <result type="json">          
                    <param name="includeProperties">success,message</param>
                    <!--这里指定将要从中排除那些属性-->
                    <param name="excludeProperties">success</param>
            </result>  
        </action>  
 </package>  

 

返回的json为:

{"message":"登录成功!"}

 

在json配置中还有一些比较偏的属性:如:ignoreHierarchy(转化时是否忽略继承关系true/false)、enumAsBean(是否将枚举当做一个bean处理)、enableGZIP (是否支持gzip压缩输出)、noCache (是否缓存)、statusCode (设置响应代号)、callbackParameter (JSONP跨域访问的回调设置)、contentType( 输出类型)

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。