常用方式:在使用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>