首页 > 代码库 > 详解struct2配置json

详解struct2配置json

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

 

@Controllerpublic 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( 输出类型)

 

详解struct2配置json