想要在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环境就不需要手动了。下面以一个例子讲解。

 package action;

 import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.struts2.json.annotations.JSON; import com.opensymphony.xwork2.ActionSupport; import entity.Outbox;
import util.DaoFactory; public class SendBoxJson extends ActionSupport {
private static final long serialVersionUID = 1L;
private Map<String,Object> data;
private String state; private String userId;
private String searchType;
private String keyValue;
private String start;
private String end; public Map getData() {
return data;
} public String getState() {
return state;
} public void setUserId(String userId) {
this.userId = userId;
} public void setSearchType(String searchType) {
this.searchType = searchType;
} public void setKeyValue(String keyValue) {
this.keyValue = keyValue;
} public void setStart(String start) {
this.start = start;
} public void setEnd(String end) {
this.end = end;
} public String getJson() throws Exception {
List<Outbox> list = DaoFactory.getOutBoxDaoInstance().getOutMails(userId, searchType, keyValue, start, end);
state="success";
data=new HashMap<String,Object>();
data.put("data", list);
data.put("state",state);
System.out.println(data);
return "heihei";
}
}

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

     <package name="json" namespace="/" extends="struts-default,json-default">
<action name="json" class="action.SendBoxJson" method="getJson"> <result name="heihei" type="json"> <!-- 这里指定将被Struts2序列化的属性,该属性在action中必须有对应的getter方法 -->
<param name="root">data</param>
<!-- 指定是否序列化空的属性 -->
<param name="excludeNullProperties">true</param>
<!-- 这里指定将序列化list中的那些属性 -->
<!-- <param name="includeProperties">data.*</param> -->
<!-- 这里指定将要从list中排除那些属性,这些排除的属性将不被序列化,一般不与上边的参数配置同时出现 -->
<!-- <param name="excludeProperties">id</param> -->
</result>
</action>
</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是一对多关系的表示.

struts返回json数据的更多相关文章

  1. 【自制工具类】struts返回json数据包装格式类

    自己写的一个给struts返回的json数据包装格式类,不喜勿喷,原创,需在项目中引入com.alibaba.fastjson的jar包 先看下效果(这里没有使用msg,有兴趣的往下看): 上demo ...

  2. struts框架返回json数据

    设置返回result类型为json格式 <package name="cn.konngo.action" namespace="/" extends=&q ...

  3. 深入了解Struts2返回JSON数据的原理

    首先来看一下JSON官方对于"JSON"的解释: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析 ...

  4. struts2 的验证框架validation如何返回json数据 以方便ajax交互

    struts2 的验证框架validation简单,好用,但是input只能输出到jsp页面通过struts2的标签<s:fielderror  />才能取出,(EL应该也可以). 如果使 ...

  5. J2EE Web开发入门—通过action是以传统方式返回JSON数据

    关键字:maven.m2eclipse.JSON.Struts2.Log4j2.tomcat.jdk7.Config Browser Plugin Created by Bob 20131031 l ...

  6. Struts2返回Json数据(使用Struts2插件)

    这篇我将介绍如何使用Struts2的struts2-json-plugin.jar插件返回JSON数据. 一.其中主要步骤有: 1.将struts2-json-plugin.jar插件拷贝到项目的&q ...

  7. 【Struts2】SSH如何返回JSON数据

      在开发中我们经常遇到客户端和后台数据的交互,使用比较多的就是json格式了.在这里以简单的Demo总结两种ssh返回Json格式的数据 项目目录如下 主要是看 上图选择的部分 WebRoot里面就 ...

  8. (转)Struts2返回JSON数据的具体应用范例

    转载自 yshjava的个人博客主页 <Struts2返回JSON数据的具体应用范例> 早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具 ...

  9. Struts2返回JSON数据的具体应用范例

    早在我刚学Struts2之初的时候,就想写一篇文章来阐述Struts2如何返回JSON数据的原理和具体应用了,但苦于一直忙于工作难以抽身,渐渐的也淡忘了此事.直到前两天有同事在工作中遇到这个问题,来找 ...

随机推荐

  1. Javascript一个在页面内追加元素的小例子

    如下: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8 ...

  2. [日常] Go语言圣经-命令行参数

    1.编译 go build hello.go 2.go get gopl.io/ch1/helloworld 命令,就会从网上获取代码,并放到对应目录中 下载的代码会放在$GOPATH/src/gop ...

  3. java 对CSV 文件的读取与生成

    CSV文件是以逗号分隔值的文件格式,一般用WORDPAD或记事本(NOTE),EXCEL打开.CSV(逗号分隔值)是一种用来存储数据的纯文本文件,通常都是用于存放电子表格或数据的一种文件格式,对于CS ...

  4. CSS starts

    I have not written any articles here since I graduated from my university. Now I begin to write down ...

  5. JSP学习笔记(2)-JSP语法

    1.JSP页面的基本结构 (1)HTML标记符(2)JSP标记(3)变量和方法的声明(4)Java程序片(5)Java表达式 2.变量和方法的声明 成员变量和方法 语法:<%! 变量.方法%&g ...

  6. drupal7 addExpression+union+分页

    global $user; $query_single = db_select('mp_order_singlepay', 'ms') ->fields('ms', array('order_i ...

  7. ORA-00054 资源正忙

    现象: 执行update.truncate提示 ORA-00054: resource busy and acquire with NOWAIT specified. 解决方法: 因为系统是RAC系统 ...

  8. Pwn with File结构体(一)

    前言 本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274 利用 FILE 结构体进行攻击,在现在的 ctf 比赛中也经常出现 ...

  9. Android控件显示和隐藏

    Android控件都有visibility属性,该属性有三个可能值:visible.invisible.gone.可以通过预设或是Java程序控制这些控件的显示或隐藏. 一.在XML配置文件设置 可见 ...

  10. 【Python】Java程序员学习Python(六)— 流程控制、异常处理

    和Java语言一样,Python也有基本的流程控制,简单了解下即可. 一.流程控制的元素 条件 条件就是布尔值或者布尔值的表达式,要么是True要么是False. 代码块 在Python中,代码块不是 ...