struts返回json数据

  想要在struts中返回json格式数据有两种办法。

  1.使用servlet的输出流

  实际上就是在struts中获取response对象的输出流。然后写入你要返回的json数据,本质和用servlet返回json数据是一样的,需要自己导入json的jar包。不做详细介绍。

  2.试用struts对json的扩展

  这里需要两个jar包,xwork-core-2.1.6.jar和struts2-json-plugin-2.1.8.jar。如果是用MyEclipse注入的struts环境就不需要手动了。下面以一个例子讲解。

 1 package action;
 2 
 3 import java.util.HashMap;
 4 import java.util.List;
 5 import java.util.Map;
 6 
 7 import org.apache.struts2.json.annotations.JSON;
 8 
 9 import com.opensymphony.xwork2.ActionSupport;
10 
11 import entity.Outbox;
12 import util.DaoFactory;
13 
14 public class SendBoxJson extends ActionSupport {
15     private static final long serialVersionUID = 1L;
16     private Map<String,Object> data;
17     private String state;
18     
19     private String userId;
20     private String searchType;
21     private String keyValue;
22     private String start;
23     private String end;
24 
25     
26 
27     
28 
29     public Map getData() {
30         return data;
31     }
32     
33     public String getState() {
34         return state;
35     }
36 
37 
38     public void setUserId(String userId) {
39         this.userId = userId;
40     }
41 
42     public void setSearchType(String searchType) {
43         this.searchType = searchType;
44     }
45 
46     public void setKeyValue(String keyValue) {
47         this.keyValue = keyValue;
48     }
49 
50     public void setStart(String start) {
51         this.start = start;
52     }
53 
54     public void setEnd(String end) {
55         this.end = end;
56     }
57 
58     public String getJson() throws Exception {
59         List<Outbox> list = DaoFactory.getOutBoxDaoInstance().getOutMails(userId, searchType, keyValue, start, end);
60         state="success";
61         data=new HashMap<String,Object>();
62         data.put("data", list);
63         data.put("state",state);
64         System.out.println(data);
65         return "heihei";
66     }
67 }

上面的是一个普通的struts类,没什么特殊之处。重点在struts的配置文件中。

 1     <package name="json" namespace="/" extends="struts-default,json-default">
 2         <action name="json" class="action.SendBoxJson" method="getJson">
 3             
 4             <result name="heihei" type="json">
 5 
 6                 <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
 7                 <param name="root">data</param>
 8                 <!-- 指定是否序列化空的属性 -->
 9                 <param name="excludeNullProperties">true</param>
10                 <!-- 这里指定将序列化list中的那些属性 -->
11                 <!-- <param name="includeProperties">data.*</param> -->
12                 <!-- 这里指定将要从list中排除那些属性,这些排除的属性将不被序列化,一般不与上边的参数配置同时出现 -->
13                 <!-- <param name="excludeProperties">id</param> -->
14             </result>
15         </action>
16     </package>

在配置中,首先需要action所在的package继承了json-default,或者继承的父包继承了json-default。然后result里多了个type=“json”这是说明返回的是json字符串。

<param name="root">data</param>要讲data这个变量序列化后返回,data是上面struts类中一个变量。

注意如果data类型为list,需要使用

<param name="includeProperties">data.*</param>来指定,否则返回的json字符串会为空。

如果想要忽略对象的某个属性,可在属性的get方法加@JSON(serialize=false) ,常用在hibernate的实体中,如果返回的是hibernate实体,该实体又用到了另一个实体,就会因为懒加载的原因序列化失败(自行百度),就需要在某些属性加上上面的注释。

上面的set是一对多关系的表示.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏黑泽君的专栏

【Java面试复习经典】传智播客Java就业班入学测试题及答案解析(2014年版)

3012
来自专栏晓晨的专栏

C#自动识别文件编码

2303
来自专栏程序员宝库

了解 dubbo 序列化,从 bug 开始

首先交代背景,前几天遇到一个小bug,由于其他系统的一个DTO子类和父类有一个字段名重复了,所以导致我set的子类字段那边拿不到值。改起来很简单嘛,让对面把子类...

943
来自专栏Python爱好者

Python高效编程(五)

1053
来自专栏博客园

Mongo字符串类型的数值查询---$Where查询介绍

​        在Mongo中都知道字符串类型大小比较都是以ASCII进行比较的,所以无法真实比较字符串类型的数值大小

2804
来自专栏开发与安全

算法:静态查找表(Static Search Table)(顺序查找、二分查找、插值查找、斐波纳契查找)

查找表(Search table)是由同一类型的数据元素(或记录)构成的集合。关键字(key)是数据元素中某个数据项的值,又称为键值,用它可以表示一个数据元素,...

2315
来自专栏我杨某人的青春满是悔恨

深入理解 weak-strong dance

这时handler持有 Block 对象,而 Block 对象虽然捕获了weakSelf,延长了weakSelf这个局部变量的生命周期,但weakSelf是附有...

924
来自专栏Python爬虫与算法进阶

学点算法之栈的学习与应用

在学习栈前,脑海中对这个词只有一个印象:客栈 栈是什么 栈(有时称为“后进先出栈”)是一个项的有序集合,其中添加移除新项总发生在同一端。 这段话初学者是懵逼的...

3093
来自专栏吴伟祥

字节、字符、位 原

字节(Byte /bait/ n. [C])是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。

1013
来自专栏阿杜的世界

Java虚拟机规范阅读笔记—第2章

在发生一个方法调用的时候会创建一个栈帧,在方法执行结束(无论是正常结束还是抛出异常)的时候栈帧会被销毁。栈帧在JVM的栈上分配,栈属于某个线程。每个栈帧都有自己...

942

扫码关注云+社区