首页 > 代码库 > 详解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