Struts2返回JSON对象Word文档格式.docx
《Struts2返回JSON对象Word文档格式.docx》由会员分享,可在线阅读,更多相关《Struts2返回JSON对象Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
returnSUCCESS;
}
/*返回UserInfo对象*/
publicStringreturnUser(){
userInfo=newUserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("
刘栋"
);
userInfo.setPassword("
123456"
/*返回List对象*/
publicStringreturnList(){
userInfosList=newArrayList<
UserInfo>
();
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);
3)struts.xml(必须继承json-default、json-default继承自struts-default)
<
packagename="
default"
namespace="
/json"
extends="
json-default"
>
actionname="
returnMsg"
class="
com.testAction"
method="
resultname="
success"
type="
json"
<
paramname="
root"
validate<
/param>
/result>
/action>
returnUser"
includeProperties"
userInfo\.userId,userInfo\.userName,userInfo\.password
returnList"
userInfosList\[\d+\]\.userName,userInfosList\[\d+\]\.password
/package>
4、只要继承extends="
,resulttype设置成json之后,容器会把action的属性自动封装到一个json对象中(json拦截器来做)
5、includeProperties参数:
输出结果中需要包含的属性值,这里正则表达式和属性名匹配,可以用“,”分割填充多个正则表达式。
如:
输出UserInfo的所有属性及UserInfo的userName属性
resulttype="
userInfo.*,
userInfo\.userName<
6、excludeProperties参数:
输出结果需要剔除的属性值,也支持正则表达式匹配属性名,可以用“,”分割填充多个正则表达式,类同includeProperties
7、输出一个JSONList列表
其中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.
*
p>
5.
创
建
人:
ChenTao
6.
7.
创建日期:
2009-5-18
下午05:
24:
48
8.
9.
*/
10.public
class
Users
{
11.
12.
private
Integer
userId;
13.
14.
String
userName;
15.
16.
sex;
17.
18.
public
Users()
19.
20.
}
21.
//
get...
set....
略......
22.}
packagecom.jsontostruts2.vo;
/**
*<
*创建人:
ChenTao
*创建日期:
2009-5-18下午05:
48
*/
publicclassUsers{
privateIntegeruserId;
privateStringsex;
publicUsers(){
}
//get...set....略......
实现UserAction.java源码如下:
com.jsontostruts2.action;
3.import
com.googlecode.jsonplugin.annotations.JSON;
4.import
com.jsontostruts2.vo.Users;
5.import
com.opensymphony.xwork2.ActionSupport;
7./**
10.
22:
50
14.@SuppressWarnings("
serial"
)
15.public
UserAction
extends
ActionSupport
users;
@JSON(name="
USER"
getUsers()
return
22.
23.
24.
void
setUsers(Users
users)
25.
this.users
=
26.
27.
28.
@Override
29.
execute()
throws
Exception
30.
users
new
Users();
31.
users.setUserId
(1);
32.
users.setUserName("
ctojxzsycztao"
33.
users.setSex("
男人"
34.
SUCCESS;
35.
36.
37.}
packagecom.jsontostruts2.action;
importcom.googlecode.jsonplugin.annotations.JSON;
importcom.jsontostruts2.vo.Users;
importcom.opensymphony.xwork2.ActionSupport;
50
@SuppressWarnings("
)
publicclassUserActionextendsActionSupport{
privateUsersusers;
@JSON(name="
publicUsersgetUsers(){
returnusers;
publicvoidsetUsers(Usersusers){
this.users=users;
@Override
publicStringexecute()throwsException{
users=newUsers();
users.setUserId
(1);
users.setUserName("
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"
http:
//struts.apache.org/dtds/struts-2.0.dtd"
6.<
struts>
--
注意这里扩展不再是
struts-default,而是
json-default
-->
package
name="
jsonManager"
extends="
返回结果类型为
json
action
userJson"
class="
com.jsontostruts2.action.UserAction"
result
type="
/>
该action在返回列表时添加进来的
jsonlist"
com.jsontostruts2.action.UserListAction"
19.<
/struts>
xmlversion="
encoding="
DOCTYPEstrutsPUBLIC
"
-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
--注意这里扩展不再是struts-default,而是json-default-->
<
--返回结果类型为json-->
<
--该action在返回列表时添加进来的-->
能后创建web.xml和userjson.jsp:
1.web.xml
:
3.<
web-app
2.5"
xmlns="
xmlns:
xsi="
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
filter>
filter-name>
Struts2<
/filter-name>
filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
/filter-class>
/filter>
filter-mapping>
url-pattern>
*.action<
/url-pattern>
/filter-mapping>
*.jsp<
welcome-file-list>
welcome-file>
index.jsp<
/welcome-file>
/welcome-file-list>
26.<
/web-app>
web.xml:
web-appversion="
xmlns="
xmlns:
xsi:
org.apache.struts2.dispatcher.FilterDispatcher
userjson.jsp:
Html代码
%@
page
language="
java"
contentType="
text/html;
charset=UTF-8"
%>
HTML
PUBLIC
-//W3C//DTD
4.01
Transitional//EN"
html>
head>
title>
返回对象处理<
/title>
script
javascript"
var
xmlHttp
false;
try{
ActiveXObject("
msxml2.XMLHTTP"