利用struts2返回json对象
1、 首先我们要引入包(我们的包全部引自struts-2.3.1.2\lib)
struts2-json-plugin-2.3.1.2.jar
json-lib-2.1-jdk15.jar
commons-collections-3.1.jar
commons-beanutils-1.7.0.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
ezmorph-1.0.3.jar
这7个包是返回json形式的数据必须的,因为json大量引用了Apache commons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个ezmorph的包。最后要加入struts2必须的6个包。
struts2-core-2.3.1.2.jar
xwork-core-2.3.1.2.jar
ognl-3.0.4.jar
freemarker-2.3.18.jar
commons-fileupload-1.2.2.jar
commons-io-2.0.1.jar
2、 下面我们要来看一下Admins实体类的代码
import java.io.Serializable;
publicclass Admins implements Serializable {
privatestaticfinallong serialVersionUID = 1L;
private Integer id;
private String userName;
private String password;
private String realName;
private String sex;
private String address;
private String cellPhone;
private String email;
private String role;
并且我们要生成set()和get()方法,toString()方法,无参构造器。
3、 我们在Action中要实现其作用。
以下是我们的action类。代码如下:
import java.util.List;
import cn.csdn.hr.buy360.domain.Admins;
import cn.csdn.hr.buy360.service.AdminsService;
import cn.csdn.hr.buy360.service.AdminsServiceImpl;
import com.opensymphony.xwork2.ActionSupport;
public class AdminsAction extends ActionSupport{
private List<Admins> entities; //使用json返回list对象
private Admins admin;//使用json返回对象
//get方法
public Admins getAdmin(){
return admin;
}
public List<Admins> getEntities() {
return entities;
}
//返回Admins对象
public String execute(){
AdminsService asi = new AdminsServiceImpl();
entities = asi.getObjects(Admins.class);
//admin = (Admins) asi.findObjectById(Admins.class, 1);
/*
* get方式 entities admins
* <result type="json">
* <param name="root">entities</param>
* </result>
*
* 看返回的json数据
* ------------------
* get方式:entities admins
* <result type="json">
* <param name="root">entities,admins</param>
* </result>
* -------如果能写返回的结果
* 如果不能写就没有结果
* get方式:entities admins
* <result type="json">
* <param name="includeProperties">entities</param>
* </result>
* 试试上面的结果
*
* <result type="json">
* <param name="includeProperties">entities\[\d+\]\.realName</param>
* </result>
* 看结果
* <result type="json">
* <param name="includeProperties">^entities\[\d+\]\.realName</param>
* </result>
* ---------
* */
return SUCCESS;
}
}
通过action类我们来实现的内容,我们可以对它在struts.xml文件中进行一个一个的测试。
首先我们来测试第一个:
(1)get方式 entities admins
<result type="json">
<param name="root">entities</param>
</result>
在struts.xml文件中,我们可以这样进行测试:
<struts>
<package name="admin" extends="json-default" namespace="/csdn">
<action name="admins" class="cn.csdn.hr.buy360.action.AdminsAction">
<result type="json">
<param name="root">entities</param> <!-- 有提示 -->
</result>
</action>
</package>
</struts>
通过测试这个,我们可以得到我们所需要的效果,它是有提示的。
(2)<param name="root">entities,admin</param>
在struts.xml文件中配置这个,我们所得到的结果是没有提示的,它返回的是
{"address":null,"cellPhone":null,"email":null,"id":1,"password":"ssssssss1","realName":"sss1","role":null,"sex":null,"userName":"redarmy1"}
(3)<param name="includeProperties">entities</param>
配置好这个后,得到的结果是:没有提示,返回 {"entities":[]}。
(4)<param name="includeProperties">entities\[\d+\]\.realName</param>
得到的效果:
没有提示,{"entities":[{"realName":"sss1"},{"realName":"sss2"},{"realName":"sss3"},{"realName":"sss4"},{"realName":"sss5"},{"realName":"sss6"},{"realName":"sss7"},{"realName":"sss8"},{"realName":"sss9"}]}
(5)<param name="includeProperties">^entities\[\d+\]\.realName</param>
得到的结果:没有提示
{"entities":[{"realName":"sss1"},{"realName":"sss2"},{"realName":"sss3"},{"realName":"sss4"},{"realName":"sss5"},{"realName":"sss6"},{"realName":"sss7"},{"realName":"sss8"},{"realName":"sss9"}]}