Struts2返回JSON对象.docx
《Struts2返回JSON对象.docx》由会员分享,可在线阅读,更多相关《Struts2返回JSON对象.docx(30页珍藏版)》请在冰豆网上搜索。
![Struts2返回JSON对象.docx](https://file1.bdocx.com/fileroot1/2023-1/25/72f3b13b-ad97-4718-9438-e2495c3e38fc/72f3b13b-ad97-4718-9438-e2495c3e38fc1.gif)
Struts2返回JSON对象
1、引入包(本文中的包全部引自struts-2.1.8.1\lib):
struts2-json-plugin-2.1.8.1.jar
json-lib-2.1.jar
commons-collections-3.2.jar
commons-beanutils-1.7.0.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar
ezmorph-1.0.3.jar
这7个包是返回json形式的数据必须的。
因为json大量引用了Apachecommons的包,所以要加入4个,commons包,除了commons的包外,还需要引入一个ezmorph的包。
最后加入struts2必须的6个包:
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
ognl-2.7.3.jar
freemarker-2.3.15.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
2、后台:
1)Userinfo实体类代码
publicclassUserInfoimplementsSerializable{
privateintuserId;
privateStringuserName;
privateStringpassword;
getset方法略
}
2)Action类
publicclassTestActionextendsActionSupport{
privateStringmessage;//使用json返回单个值
privateUserInfouserInfo;//使用json返回对象
privateListuserInfosList;//使用josn返回List对象
getset方法略
/*返回单个值*/
publicStringreturnMsg(){
this.message="成功返回单个值";
returnSUCCESS;
}
/*返回UserInfo对象*/
publicStringreturnUser(){
userInfo=newUserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("刘栋");
userInfo.setPassword("123456");
returnSUCCESS;
}
/*返回List对象*/
publicStringreturnList(){
userInfosList=newArrayList();
UserInfou1=newUserInfo();
u1.setUserId(10000);
u1.setUserName("张三");
u1.setPassword("111111");
UserInfou2=newUserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("222222");
userInfosList.add(u1);
userInfosList.add(u2);
returnSUCCESS;
}
}
3)struts.xml(必须继承json-default、json-default继承自struts-default)
validate
userInfo\.userId,userInfo\.userName,userInfo\.password
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
4、只要继承extends="json-default",resulttype设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做)
5、includeProperties参数:
输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。
如:
输出UserInfo的所有属性及UserInfo的userName属性
userInfo.*,
userInfo\.userName
6、excludeProperties参数:
输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
7、输出一个JSONList列表
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
其中userInfosList是action中的一个List类型的属性,userInfosList\[\d+\]\.userName表示,userInfosList中存储的对象0..end的userName属性(list中存储的对象必须有userName属性)。
8、为什么要用includeProperties或excludeProperties参数:
主要是为了过滤掉接口,pojo的set、list、其它对象等不需要的数据防止循环取其它关联对象或找不到接口。
如果不配置,默认是处理action中的所有属性,如果action中有接口注入,json拦截器可能找不到接口而返回不了结果,还有如果action中有一个对象,这个对象与好多对象都有关联,json拦截器会将相关联的所有对象的属性全部转换成json格式,如果其它对象有list、set,其返回结果相当庞大,有可能是死循环而无法返回。
如果不用或其他方式进行json数据过滤,通过debug你会发现前台返回的json字符串,是把action中的所有属性全部转化成json字符串返回给客户端(包括service接口、pojo所有属性及有关联的pojo。
有时候根本返回不了结果,也不报错,后台执行了,但前台执行不到callbackfunction,这主要是因为找不到接口或者关联的pojo太多,造成死循环),一般情况下用的最多的就是root、includeProperties和excludeNullProperties参数。
当然还有其他的方法,如给pojo的属性加json注解。
9、总结:
action中避免使用get开头的action方法,去掉action中的接口的get方法为json类型的result配置includeProperties,excludeProperties等参数.
另一篇资料:
本例程分为二步来写,第一步实现返回一个结果对象,第二步实现返回一个结果列表,首先来看下返回结果对象的实现.
我们需要先建立一个JavaBean为值对象,用来将用户的基本数据封装进去,该实体在结果对象和结果列表中都会使用到
Users.java代码如下:
Java代码
1.package com.jsontostruts2.vo;
2.
3./**
4. *
5. * 创 建 人:
ChenTao
6. *
7. * 创建日期:
2009-5-18 下午05:
24:
48
8. *
9. */
10.public class Users {
11.
12. private Integer userId;
13.
14. private String userName;
15.
16. private String sex;
17.
18. public Users() {
19.
20. }
21. // get... set.... 略......
22.}
packagecom.jsontostruts2.vo;
/**
*
*创建人:
ChenTao
*
*创建日期:
2009-5-18下午05:
24:
48
*
*/
publicclassUsers{
privateIntegeruserId;
privateStringuserName;
privateStringsex;
publicUsers(){
}
//get...set....略......
}
实现UserAction.java源码如下:
Java代码
1.package com.jsontostruts2.action;
2.
3.import com.googlecode.jsonplugin.annotations.JSON;
4.import com.jsontostruts2.vo.Users;
5.import com.opensymphony.xwork2.ActionSupport;
6.
7./**
8. *
9. * 创 建 人:
ChenTao
10. *
11. * 创建日期:
2009-5-18 下午05:
22:
50
12. *
13. */
14.@SuppressWarnings("serial")
15.public class UserAction extends ActionSupport {
16.
17. private Users users;
18.
19. @JSON(name="USER")
20. public Users getUsers() {
21. return users;
22. }
23.
24. public void setUsers(Users users) {
25. this.users = users;
26. }
27.
28. @Override
29. public String execute() throws Exception {
30. users = new Users();
31. users.setUserId
(1);
32. users.setUserName("ctojxzsycztao");
33. users.setSex("男人");
34. return SUCCESS;
35. }
36.
37.}
packagecom.jsontostruts2.action;
importcom.googlecode.jsonplugin.annotations.JSON;
importcom.jsontostruts2.vo.Users;
importcom.opensymphony.xwork2.ActionSupport;
/**
*
*创建人:
ChenTao
*
*创建日期:
2009-5-18下午05:
22:
50
*
*/
@SuppressWarnings("serial")
publicclassUserActionextendsActionSupport{
privateUsersusers;
@JSON(name="USER")
publicUsersgetUsers(){
returnusers;
}
publicvoidsetUsers(Usersusers){
this.users=users;
}
@Override
publicStringexecute()throwsException{
users=newUsers();
users.setUserId
(1);
users.setUserName("ctojxzsycztao");
users.setSex("男人");
returnSUCCESS;
}
}
接下来我们需要配置struts.xml文件,为了在现下面不再重复写该文件,这里我将结果对象和列表的请求控制一并贴上来,文件内容:
Xml代码
1.
xml version="1.0" encoding="UTF-8"?
>
2.
DOCTYPE struts PUBLIC
3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
4. "http:
//struts.apache.org/dtds/struts-2.0.dtd">
5.
6.
7.
-- 注意这里扩展不再是 struts-default,而是 json-default -->
8.
9.
-- 返回结果类型为 json -->
10.
11.
12.
13.
-- 该action在返回列表时添加进来的 -->
14.
15.
16.
17.
18.
19.
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEstrutsPUBLIC
"-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
"http:
//struts.apache.org/dtds/struts-2.0.dtd">
--注意这里扩展不再是struts-default,而是json-default-->
--返回结果类型为json-->
--该action在返回列表时添加进来的-->
能后创建web.xml和userjson.jsp:
Xml代码
1.web.xml :
2.
xml version="1.0" encoding="UTF-8"?
>
3.4. xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
5. xsi:
schemaLocation="
6.
7.
8.
9. Struts2
10.
11. org.apache.struts2.dispatcher.FilterDispatcher
12.
13.
14.
15. Struts2
16. *.action
17.
18.
19. Struts2
20. *.jsp
21.
22.
23.
24. index.jsp
25.
26.
web.xml:
xmlversion="1.0"encoding="UTF-8"?
>
xmlns:
xsi="http:
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
Struts2
org.apache.struts2.dispatcher.FilterDispatcher
Struts2
*.action
Struts2
*.jsp
index.jsp
userjson.jsp:
Html代码
1.<%@ page language="java" contentType="text/html;charset=UTF-8"%>
2.
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3.
4.
5.
json 返回对象处理 6.