struts2+json 配置

来源:互联网 发布:protobuf 数组 编辑:程序博客网 时间:2024/06/03 22:47

平时在使用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>




1 0
原创粉丝点击