我在一篇 《Easyui的datagrid结合hibernate实现数据分页 》中使用了JSONParser的自己编写的工具类,现在分享一下,其实这个工具很简单。
大多数情况下,我后台都是把结果以List的形式返回给前台,但list的形式却不能满足AJAX处理json的格式,为了方便起见,我就简单了写了一个JSONParser类。
一、首先得准备三个jar包,下载网址是http://jackson.codehaus.org/,我用的是2.0.版本,
这三个下载的时候会有点小麻烦,不过对英文还可以的人来说就是小case了。。
二、将下载的三个jar(jackson-core-xxx.jar,jackson-databind-xxx.jar,jackson-annotation-xxx.jar)导入到web应用的lib下,annotation的jar是用来使用注解的,不过我这个工具类功能不是很全,我就没必要用这个包了,但是还是要引入的,不引入会报错。
三、贴上代码,代码里的注释解释了用法,本文不是jackson的教学文章,所以不会很深入的讲解jackson的使用,只是简单的解释了下部分方法。
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JSONParser {
//定义一个ObjecMapper ,这些写法都是从官方的文档上看的,详情可以去查询官方文档。
final static ObjectMapper om = new ObjectMapper();
//自定义一个方法,将java的object写成json格式,然后用response返回前台页面。
public static void writeJson(Object obj) {
//这里,我用的是struts2的访问request,response,session的工具ServletActionContext类来得到的response。
HttpServletResponse response = ServletActionContext.getResponse();
//中文字符处理
response.setCharacterEncoding("UTF-8");
try {
/*ObjectMapper有多个个writeValue方法,这里我用的是这一个,需要一个输出流和一个对象做参数。
public void writeValue(OutputStream out,
Object value)
throws IOException,
JsonGenerationException,
JsonMappingException
官方文档:Method that can be used to serialize any Java value as JSON output, using Writer provided.
这个方法可以用一个提供的writer将任何java 值序列化成JSON 输出。
Note: method does not close the underlying stream explicitly here;
however, JsonFactory this mapper uses may choose to close
the stream depending on its settings (by default,
it will try to close it when JsonGenerator we construct is closed).
这个方法在这里不能明确的关闭底层的流,但是这个mapper使用的JsonFactory可以选择根据它的的设置来关闭流
默认是当我们创建的JsonGenerator关闭了它才关闭流。
*/
om.writeValue(response.getWriter(), obj);
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、这个类完成了,我并没有是它的JsonGenerator来操作java,具体的使用方法请移步官方指导:https://github.com/FasterXML/jackson-databind
在其他的Action就可以使用这个工具了。
public String getUsers() {
List<User> users = new ArrayList<User>();
User u =new User();
//BeanUtils.copyProperties(this, u);使用spring的BeanUtils工具,复制属性到u里面。
u.setUsername(username);
u.setDate(date);
users = (List<User>) ud.getUsers(page, rows, u);
Map<String, Object> m = new HashMap<String, Object>();
m.put("total", ud.getTotal(page, rows, u));
m.put("rows", users);
//jackson工具
JSONParser.writeJson(m);
return "success";
}
至此,这个JSONParser工具的来龙去脉就理清了,呵呵,其实jackson还有很多方法,能做的事远远不止这些,俺这只是冰山一角罢了,不过够俺使用就行了。。。
PS:我在开源中国社区(oschina)的博客一会同步更新噢,欢迎探讨斧正。博客地址:http://my.oschina.net/sgl