MyEclipse开发JAX-RS架构WebServices收发JSON数据格式

最近因项目需求,开始学习WebServices。

1、开发环境:

MyEclipse2013

2、客户端发送的JSON数据格式为

{persons:[{"name":"a","age":1},{"name":"b","age":2}],"sex":"male"}(POST请求方式使用)

{"name":"abc","age":123}(PUT请求方式使用)

3、服务端返回的JSON数据格式为

{"message":"OK"}

4、客户端请求方式包括

POST、PUT、DELETE、GET

5、服务端参数来自HTTP请求的位置包括

URL路径、URL查询参数

第一步:建立WebServices工程,如图

 

直接Finish就好,也可以自己Next一下看看有哪些设置。

 

第二步:添加额外Jar包,包括

org.json

gson

org.restlet.ext.jaxrs

org.restlet.ext.json

org.restlet.ext.servlet

org.restlet

第二步:创建Person类

[java] view plaincopy

  1. package server;  
  2.   
  3. public class Person {  
  4.     private String name;  
  5.     private int age;  
  6.   
  7.     public Person(String name, int age) {  
  8.         this.name = name;  
  9.         this.age = age;  
  10.     }  
  11.   
  12.     public Person() {  
  13.     }  
  14.   
  15.     public void setName(String name) {  
  16.         this.name = name;  
  17.     }  
  18.   
  19.     public void setAge(int age) {  
  20.         this.age = age;  
  21.     }  
  22.   
  23.     public String getName() {  
  24.         return this.name;  
  25.     }  
  26.   
  27.     public int getAge() {  
  28.         return this.age;  
  29.     }  
  30.   
  31.     public String toString() {  
  32.         return "name=" + this.name + "|age=" + this.age;  
  33.     }  
  34. }  

 

第三步:创建MyResponse类

[java] view plaincopy

  1. package server;  
  2.   
  3. public class MyResponse {  
  4.     private String message;  
  5.   
  6.     public MyResponse(String message) {  
  7.         this.message = message;  
  8.     }  
  9.   
  10.     public MyResponse() {  
  11.     }  
  12.   
  13.     public void setMessage(String message) {  
  14.         this.message = message;  
  15.     }  
  16.   
  17.     public String getMessage() {  
  18.         return this.message;  
  19.     }  
  20.   
  21.     public String toString() {  
  22.         return "message=" + this.message;  
  23.     }  
  24. }  


第四步:创建PersonResource类

[java] view plaincopy

  1. package server;  
  2.   
  3. import java.util.List;  
  4.   
  5. import javax.ws.rs.Consumes;  
  6. import javax.ws.rs.DELETE;  
  7. import javax.ws.rs.GET;  
  8. import javax.ws.rs.POST;  
  9. import javax.ws.rs.PUT;  
  10. import javax.ws.rs.Path;  
  11. import javax.ws.rs.PathParam;  
  12. import javax.ws.rs.Produces;  
  13. import javax.ws.rs.QueryParam;  
  14.   
  15. import org.json.JSONArray;  
  16. import org.json.JSONException;  
  17. import org.json.JSONObject;  
  18.   
  19. import com.google.gson.Gson;  
  20. import com.google.gson.reflect.TypeToken;  
  21.   
  22. @Path("/person")  
  23. public class PersonResource {  
  24.     @POST  
  25.     // 设置请求方式  
  26.     @Path("/post")  
  27.     // 设置请求路径  
  28.     @Consumes("application/json")  
  29.     // 设置接收数据格式  
  30.     @Produces("application/json")  
  31.     // 设置返回数据格式  
  32.     public MyResponse post(JSONObject request) {  
  33.         MyResponse response = new MyResponse("OK");  
  34.   
  35.         // 获取persons数组  
  36.         JSONArray persons;  
  37.         String sex;  
  38.         try {  
  39.             persons = request.getJSONArray("persons");  
  40.             sex = request.getString("sex");  
  41.         } catch (JSONException e) {  
  42.             e.printStackTrace();  
  43.   
  44.             response.setMessage("ERROR");  
  45.             return response;  
  46.         }  
  47.   
  48.         // 获取各person信息  
  49.         int count = persons.length();  
  50.         Gson gson = new Gson();  
  51.         List<Person> ps = gson.fromJson(persons.toString(),  
  52.                 new TypeToken<List<Person>>() {  
  53.                 }.getType());  
  54.         for (int i = 0; i < count; i++) {  
  55.             Person p = ps.get(i);  
  56.             System.out.println(p);  
  57.         }  
  58.         System.out.println(sex);  
  59.         return response;  
  60.     }  
  61.   
  62.     @PUT  
  63.     @Path("/put")  
  64.     @Consumes("application/json")  
  65.     @Produces("application/json")  
  66.     public MyResponse put(JSONObject request) {  
  67.         MyResponse response = new MyResponse("OK");
  68.         Gson gson = new Gson();  
  69.         Person p = gson.fromJson(request.toString(), Person.class);  
  70.         System.out.println(p);  
  71.         return response;  
  72.     }  
  73.   
  74.     @DELETE  
  75.     @Path("/delete")  
  76.     @Produces("application/json")  
  77.     // 从URL查询参数中获取参数  
  78.     public MyResponse delete(@QueryParam("name") List<String> name,  
  79.             @QueryParam("age") int age) {  
  80.         MyResponse response = new MyResponse("OK");
  81.         System.out.println(name);  
  82.         System.out.println(age);  
  83.         return response;  
  84.     }  
  85.   
  86.     @GET  
  87.     @Path("/{name}/get")  
  88.     @Produces("application/json")  
  89.     // 从URL路径中获取参数  
  90.     public MyResponse get(@PathParam("name") String name) {  
  91.         MyResponse response = new MyResponse("OK");
  92.         System.out.println(name);  
  93.         return response;  
  94.     }  
  95. }  

 

第五步:创建PersonApplication类

[java] view plaincopy

  1. package app;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import javax.ws.rs.core.Application;  
  7.   
  8. import server.PersonResource;  
  9.   
  10. public class PersonApplication extends Application {  
  11.     @Override  
  12.     public Set<Class<?>> getClasses() {  
  13.         Set<Class<?>> rrcs = new HashSet<Class<?>>();  
  14.         // 绑定PersonResource。有多个资源可以在这里绑定。  
  15.         rrcs.add(PersonResource.class);  
  16.         return rrcs;  
  17.     }  
  18. }  

 

第六步:创建RestJaxRsApplication类

[java] view plaincopy

  1. package app;  
  2.   
  3. import org.restlet.Context;  
  4. import org.restlet.ext.jaxrs.JaxRsApplication;  
  5.   
  6. public class RestJaxRsApplication extends JaxRsApplication {  
  7.     public RestJaxRsApplication(Context context) {  
  8.         super(context);  
  9.         // 将PersonApplication加入了运行环境中,如果有多个Application可以在此绑定  
  10.         this.add(new PersonApplication());  
  11.     }  
  12. }  

 

第七步:修改web.xml,添加如下内容

[html] view plaincopy

  1. <context-param>  
  2.   <param-name>org.restlet.application</param-name>  
  3.   <param-value>app.RestJaxRsApplication</param-value>  
  4. </context-param>  
  5. <servlet>  
  6.   <servlet-name>PersonServlet</servlet-name>  
  7.   <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>  
  8. </servlet>  
  9. <servlet-mapping>  
  10.   <servlet-name>PersonServlet</servlet-name>  
  11.   <url-pattern>/*</url-pattern>  
  12. </servlet-mapping>  

本示例工程的web.xml的完整代码如下,可供参考

[html] view plaincopy

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">  
  3.   <display-name>EXP</display-name>  
  4.   <context-param>  
  5.     <param-name>org.restlet.application</param-name>  
  6.     <param-value>app.RestJaxRsApplication</param-value>  
  7.   </context-param>  
  8.   <servlet>  
  9.     <servlet-name>PersonServlet</servlet-name>  
  10.     <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>  
  11.   </servlet>  
  12.   <servlet-mapping>  
  13.     <servlet-name>PersonServlet</servlet-name>  
  14.     <url-pattern>/*</url-pattern>  
  15.   </servlet-mapping>  
  16. </web-app>  

 

第八步:编写客户端

[java] view plaincopy

  1. package test;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6.   
  7. import org.json.JSONArray;  
  8. import org.json.JSONException;  
  9. import org.json.JSONObject;  
  10. import org.junit.Test;  
  11. import org.restlet.data.MediaType;  
  12. import org.restlet.resource.ClientResource;  
  13. import org.restlet.resource.ResourceException;  
  14.   
  15. import server.Person;  
  16.   
  17. import com.google.gson.Gson;  
  18.   
  19. public class Client {  
  20.     public static String url = "http://127.0.0.1:8080/EXP/person";  
  21.   
  22.     @Test  
  23.     public void testPost() {  
  24.         ClientResource client = new ClientResource(url + "/post");  
  25.         try {  
  26.             Gson gson = new Gson();  
  27.             List<Person> ps = new ArrayList<Person>();  
  28.             for (int i = 0; i < 2; i++) {  
  29.                 Person p = new Person();  
  30.                 p.setName(String.valueOf(‘a‘ + i));  
  31.                 p.setAge(i + 1);  
  32.                 ps.add(p);  
  33.             }  
  34.             JSONArray persons = new JSONArray(gson.toJson(ps));  
  35.             JSONObject json = new JSONObject("{\"persons\":" + persons  
  36.                     + ",\"sex\":male}");  
  37.             String result = client.post(json, MediaType.APPLICATION_JSON)  
  38.                     .getText();  
  39.             System.out.println("This is POST...");  
  40.             System.out.println(result);  
  41.         } catch (Exception e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.     }  
  45.   
  46.     @Test  
  47.     public void testPut() {  
  48.         ClientResource client = new ClientResource(url + "/put");  
  49.         JSONObject json;  
  50.         try {  
  51.             json = new JSONObject("{\"name\":\"abc\",\"age\":123}");  
  52.             String result = client.put(json, MediaType.APPLICATION_JSON)  
  53.                     .getText();  
  54.             System.out.println("This is PUT...");  
  55.             System.out.println(result);  
  56.         } catch (JSONException e) {  
  57.             e.printStackTrace();  
  58.         } catch (ResourceException e) {  
  59.             e.printStackTrace();  
  60.         } catch (IOException e) {  
  61.             e.printStackTrace();  
  62.         }  
  63.     }  
  64.   
  65.     @Test  
  66.     public void testDelete() {  
  67.         ClientResource client = new ClientResource(url  
  68.                 + "/delete?name=xyz,ijk&age=456");  
  69.         try {  
  70.             String result;  
  71.             result = client.delete().getText();  
  72.             System.out.println("This is DELETE...");  
  73.             System.out.println(result);  
  74.         } catch (ResourceException e) {  
  75.             e.printStackTrace();  
  76.         } catch (IOException e) {  
  77.             e.printStackTrace();  
  78.         }  
  79.     }  
  80.   
  81.     @Test  
  82.     public void testGet() {  
  83.         ClientResource client = new ClientResource(url + "/ijk/get");  
  84.         try {  
  85.             System.out.println("This is GET...");  
  86.             System.out.println(client.get().getText());  
  87.         } catch (ResourceException e) {  
  88.             e.printStackTrace();  
  89.         } catch (IOException e) {  
  90.             e.printStackTrace();  
  91.         }  
  92.     }  
  93. }  

 

第九步:启动Tomcat,发布服务

若无报错(启动和发布都没报错)则说明服务发布成功。

 

第十步:运行客户端,查看演示效果

可在客户端与服务端的控制台查看输出。

 

至此,整个示例工程结束。其中包含了主要的请求方法和参数获得方法,传输的数据格式也采用流行的JSON格式(也可以使用XML,各位可自行查找相关资料)。

 

转载与http://blog.csdn.net/nani_z/article/details/12870887

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。