struts2+json 配置

平时在使用ajax发出请求从后台获取数据的时候,经常需要将数据转换为json格式,struts2自己提供了方便的jar包来对数据进行json格式转换,下面是配置详情.:

在struts2的基础上 配置 struts2还需要的包:

commons-lang-2.4.jar;

json-lib-2.3-jdk13.jar;

jsonplugin-0[1].32.jar;

ezmorph-1.0.2.jar;

commons-beanutils-1.7.0.jar;

另外,可以通过: @JSON(name="mymessage")  来给 action 中的get属性设 json节点 别名

通过给 属性设置: @JSON(serialize=false) 来给控制 哪些属性 不序列化输出.


root:只包含xx对象
excludeProperties  :除了xx之外的集合
includeProperties : 包含xx的集合
wrapPrefix :json结果开头添加xx(比如<paramname="wrapPrefix">[</param>)
wrapSuffix :同上,只不过是结尾
ignoreHierarchy :转化时是否忽略继承关系true/false
enumAsBean : 是否将枚举当做一个bean处理
enableGZIP :是否支持gzip压缩输出
noCache :是否缓存
excludeNullProperties : 是否转化输出 null值
statusCode :设置响应代号比如 304
callbackParameter : JSONP跨域访问的回调设置

contentType : 输出类型 


action.java 中的配置:

//将会被Struts2序列化为json字符串的对象

private Map<String, Object> dataMap=new HashMap<String, Object>(); //初始化


public Map<String, Object> getDataMap() {

return dataMap;}//Struts2序列化指定属性时,必须有该属性的getter方法,实际上,如果没有属性,而只有getter方法也是可以的

方式1:通过action以视图方式返回JSON数据

 public String testByJSP() {
041         User user = new User();
042         user.setId("123");
043         user.setName("JSONActionJSP");
044         user.setPassword("123");
045         user.setSay("Hello world !");
046         JSONObject jsonObject=new JSONObject();
047         jsonObject.accumulate("user", user);
048         jsonObject.accumulate("success"true);
049         //这里在request对象中放了一个data,所以struts的result配置中不能有type="redirect"
050         ServletActionContext.getRequest().setAttribute("data", jsonObject.toString());
051         return SUCCESS;
052     };
方式2: 通过action以Struts2默认方式返回JSON数据
 public String testByAction() {
059         // dataMap中的数据将会被Struts2转换成JSON字符串,所以这里要先清空其中的数据
060         dataMap.clear();
061         User user = new User();
062         user.setId("123");
063         user.setName("JSONActionStruts2");
064         user.setPassword("123");
065         user.setSay("Hello world !");
066         dataMap.put("user", user);
067         // 放入一个是否操作成功的标识
068         dataMap.put("success"true);
069         // 返回结果
070         return SUCCESS;
071     }
方式3: 以传统方式返回JSON数据
 public void doAction() throws IOException{
078         HttpServletResponse response=ServletActionContext.getResponse();
079         //以下代码从JSON.java中拷过来的
080         response.setContentType("text/html");
081         PrintWriter out;
082         out = response.getWriter();
083         //将要被返回到客户端的对象
084         User user=new User();
085         user.setId("123");
086         user.setName("JSONActionGeneral");
087         user.setPassword("JSON");
088         user.setSay("Hello , i am a action to print a json!");
089         JSONObject json=new JSONObject();
090         json.accumulate("success"true);
091         json.accumulate("user", user);
092         out.println(json.toString());
093 //      因为JSON数据在传递过程中是以普通字符串形式传递的,所以我们也可以手动拼接符合JSON语法规范的字符串输出到客户端
094 //      以下这两句的作用与38-46行代码的作用是一样的,将向客户端返回一个User对象,和一个success字段
095 //      String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONActionGeneral\",\"say\":\"Hello , i am a action to print a json!\",\"password\":\"JSON\"},\"success\":true}";
096 //      out.println(jsonString);
097         out.flush();
098         out.close();
099     }

struts.xml 文件配置:
<?xml version="1.0" encoding="UTF-8"?>
02 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
03     "http://struts.apache.org/dtds/struts-2.0.dtd">
04 <struts>
05     <package name="json" extends="json-default" namespace="/test">
06         <action name="testByAction"
07             class="cn.ysh.studio.struts2.json.demo.action.UserAction"method="testByAction">
08             <result type="json">
09                 <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
10                 <!-- 默认将会序列所有有返回值的getter方法的值,而无论该方法是否有对应属性 -->
11                 <param name="root">dataMap</param>
12                 <!-- 指定是否序列化空的属性 -->
13                 <!--
14                 <param name="excludeNullProperties">true</param>
15                 -->
16                 <!-- 这里指定将序列化dataMap中的那些属性 -->
17                 <!--
18                 <param name="includeProperties">
19                     userList.*
20                 </param>
21                  -->
22                 <!-- 这里指定将要从dataMap中排除那些属性,这些排除的属性将不被序列化,一半不与上边的参数配置同时出现 -->
23                 <!--
24                 <param name="excludeProperties">
25                     SUCCESS
26                 </param>
27                 -->
28             </result>
29         </action>
30     </package>
31     <package name="default" extends="struts-default" namespace="/">
32         <action name="testJSONFromActionByGeneral"
33             class="cn.ysh.studio.struts2.json.demo.action.UserAction"method="doAction">
34         </action>
35         <action name="testByJSP"
36             class="cn.ysh.studio.struts2.json.demo.action.UserAction"method="testByJSP">
37             <result name="success">/actionJSP.jsp</result>
38         </action>
39     </package>
40 </struts>




你可能感兴趣的:(java,Ajax,json,struts,jar)