常用方式:在使用Jersey的过程中,与前端交互的数据大多是符合json格式的数据,然后前端使用eval方法把后台返回的符合json格式的String数据转换为json对象。其中的步骤大多是:
1.前端访问后台,后台获取数据要么使用JsonObject工具把数据转换为json格式的字符串,或者手工拼接把数据拼接成符合json格式的字符串;
2.前端获取到数据,然后使用eval方法把数据转换为json对象;
更好的方式:其实Jersey提供了自动返回application/json格式的数据,使用这种方法既省去了后台手工转换数据的过程,也省去了前端把符合json格式的字符串转换为json对象的过程;但是在使用系统自带的jar时,第一次部署系统启动后调数据会报一个异常:java.lang.ClassNotFoundException: org.codehaus.jackson.xc.JaxbAnnotationIntrospector,其实产生这个问题的原因是系统自带的jar包太久了,有一些新的class类不存在,使用最新的或者合适的jar就解决了。
package returnJson;
public class Student {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package returnJson;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
@Path("student")
public class StudentResource {
/**
* 返回json格式的数据
* 常用方式:@Produces("text/plain")
* return 返回String,返回的是手工转换好的json字符串
* @return 返回对象,其实返回的是转换为key、value的json数据
*/
@GET
@Path("get")
@Produces("application/json")
public Student getStudent() {
Student student = new Student();
student.setId("110");
student.setName("police");
/**
* return 返回String,返回的是手工转换好的json字符串
* JSONObject json = new JSONObject();
* json.accumulate("result", student);
* return json.toString();
*/
return student;
}
public static void main(String[] args) {
Client client = Client.create();
WebResource resource = client.resource("http://localhost:8888/JS/services/student/get");
String str = resource.get(String.class);
System.out.println(str);
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Jersey json测试</title>
</head>
<script type="text/javascript" src="./js/jquery-1.7.1.js"></script>
<script type="text/javascript">
$(function() {
$.get('services/student/get', {}, function(result) {
alert(result.name);
}, 'json');
//常用方式
//$.get('services/student/get', {}, function(result) {
//var data = eval('(' + result + ')');
//alert(data.result.name);
//});
});
</script>
<body>
This is my JSP page. <br>
</body>
</html>
本文介绍了一种在Jersey框架中优化JSON数据交互的方法,通过直接返回application/json格式的数据,简化了前后端的数据处理流程,并解决了一个常见的ClassNotFoundException问题。
1092

被折叠的 条评论
为什么被折叠?



