javaEE中如何获取JSON格式的数据

问题描述

  • 在web开发时,如果您后台用的是javaEE,经常需要将数据转换成JSON格式,以便序列化后返回给客户端;
  • javaEE内部能够自己将list转为JSON格式,比如下面的程序,从数据库取得数据后放在list中,在return这个list的时候javaEE内部将list转为JSON格式并序列化,作为http请求实体返回给客户端;
1
2
3
4
5
6
7
public List<ApplyInfo> getCurrentApply(int resourceId){
List<ApplyInfo> list = em.createQuery("select a from ApplyInfo a "
+ "where a.resourceId=:resourceId and a.isPassed=0")
.setParameter("resourceId", resourceId)
.getResultList();
return list;
}
  • 但是在javaEE升级后,这样的内部转JSON的机制貌似失效了(具体原因尚不清楚);
  • 导致服务器成功取得了数据,但是客户端获取不了数据,报500错误;

解决方案

  • 推荐一款轻量级的快速将数据转换为JSON格式的工具–fastjson,请看这里
  • 它使用起来非常方便,先在工程中引入这个包:
1
import com.alibaba.fastjson.JSON;
  • 如果您的工程的maven工程,直接search这个包即可,添加后在pom.xml中即可看到包已经被引入:
1
2
3
4
5
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.1.41</version>
</dependency>
  • 直接调用JSON对象的toJSONString方法,就可将list转为JSON格式的String,然后我们手动构建http响应报文的实体:
1
2
3
4
5
6
7
8
9
10
@GET
@Path("userInfo")
@Produces({"application/json"})
public Response getUserInfo() {
Query query = em.createQuery("select a.id , a.name from AuthUser a");
List<AuthUser> userInfo = query.getResultList();
System.out.println(userInfo.size());
String u = JSON.toJSONString(userInfo);
return Response.status(200).entity(u).build();
}
  • 访问我们写的API,看到数据成功被返回客户端;
您的支持是对我最大的鼓励!