一、總體說明

通過jersey-client介面,建立客戶端程式,來呼叫Jersey實現的RESTful服務,實現增、刪、改、查等操作。

服務端主要是通過記憶體的方式,來模擬使用者的增加、刪除、修改、查詢等操作。

二、建立服務端

1.在上文專案中,

在“com.waylau.rest.resources.UserResource“中修改程式碼,

首先建立一個HashMap,用來儲存新增的使用者

[java] view plain copy 
  1. private static Map<String,User> userMap  = new HashMap<String,User>();

2.建立增、刪、改、查 使用者資源等操作

[java] view plain copy 
  1. /**
  2. * 增加
  3. * @param user
  4. */
  5. @POST
  6. @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
  7. public void createStudent(User user)
  8. {
  9. userMap.put(user.getUserId(), user );
  10. }
  11. /**
  12. * 刪除
  13. * @param id
  14. */
  15. @DELETE
  16. @Path("{id}")
  17. public void deleteStudent(@PathParam("id")String id){
  18. userMap.remove(id);
  19. }
  20. /**
  21. * 修改
  22. * @param user
  23. */
  24. @PUT
  25. @Consumes(MediaType.APPLICATION_XML)
  26. public void updateStudent(User user){
  27. userMap.put(user.getUserId(), user );
  28. }
  29. /**
  30. * 根據id查詢
  31. * @param id
  32. * @return
  33. */
  34. @GET
  35. @Path("{id}")
  36. @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
  37. public User getUserById(@PathParam("id") String id){
  38. User u = userMap.get(id);
  39. return u;
  40. }
  41. /**
  42. * 查詢所有
  43. * @return
  44. */
  45. @GET
  46. @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
  47. public List<User> getAllUsers(){
  48. List<User> users = new ArrayList<User>();
  49. users.addAll( userMap.values() );
  50. return users;
  51. }

三、建立客戶端程式

1.建立包“com.waylau.rest.client”,在包下建一個UserClient.java,程式碼如下:

[java] view plain copy 
  1. package com.waylau.rest.client;
  2. import javax.ws.rs.client.Client;
  3. import javax.ws.rs.client.ClientBuilder;
  4. import javax.ws.rs.client.Entity;
  5. import javax.ws.rs.client.WebTarget;
  6. import javax.ws.rs.core.MediaType;
  7. import javax.ws.rs.core.Response;
  8. import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
  9. import com.waylau.rest.bean.User;
  10. /**
  11. * 使用者客戶端,用來測試資源
  12. * @author waylau.com
  13. * 2014-3-18
  14. */
  15. public class UserClient {
  16. private static String serverUri = "http://localhost:8089/RestDemo/rest";
  17. /**
  18. * @param args
  19. */
  20. public static void main(String[] args) {
  21. addUser();
  22. getAllUsers();
  23. updateUser();
  24. getUserById();
  25. getAllUsers();
  26. delUser();
  27. getAllUsers();
  28. }
  29. /**
  30. * 新增使用者
  31. */
  32. private static void addUser() {
  33. System.out.println("****增加使用者addUser****");
  34. User user = new User("006","Susan","21");
  35. Client client = ClientBuilder.newClient();
  36. WebTarget target = client.target(serverUri + "/users");
  37. Response response = target.request().buildPost(Entity.entity(user, MediaType.APPLICATION_XML)).invoke();
  38. response.close();
  39. }
  40. /**
  41. * 刪除使用者
  42. */
  43. private static void delUser() {
  44. System.out.println("****刪除使用者****");
  45. Client client = ClientBuilder.newClient();
  46. WebTarget target = client.target(serverUri + "/users/006");
  47. Response response = target.request().delete();
  48. response.close();
  49. }
  50. /**
  51. * 修改使用者
  52. */
  53. private static void updateUser() {
  54. System.out.println("****修改使用者updateUser****");
  55. User user = new User("006","Susan","33");
  56. Client client = ClientBuilder.newClient();
  57. WebTarget target = client.target(serverUri + "/users");
  58. Response response = target.request().buildPut( Entity.entity(user, MediaType.APPLICATION_XML)).invoke();
  59. response.close();
  60. }
  61. /**
  62. * 根據id查詢使用者
  63. */
  64. private static void getUserById() {
  65. System.out.println("****根據id查詢使用者****");
  66. Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);// 註冊json 支援
  67. WebTarget target = client.target(serverUri + "/users/006");
  68. Response response = target.request().get();
  69. User user = response.readEntity(User.class);
  70. System.out.println(user.getUserId() + user.getUserName()  +  user.getAge());
  71. response.close();
  72. }
  73. /**
  74. * 查詢所有使用者
  75. */
  76. private static void getAllUsers() {
  77. System.out.println("****查詢所有getAllUsers****");
  78. Client client = ClientBuilder.newClient();
  79. WebTarget target = client.target(serverUri + "/users");
  80. Response response = target.request().get();
  81. <span style="white-space:pre">     </span> String value = response.readEntity(String.class);
  82. <span style="white-space:pre">     <span style="white-space:pre"> </span></span> System.out.println(value);
  83. <span style="white-space:pre">  </span> response.close();  //關閉連線
  84. }
  85. }

四、執行

啟動服務端專案,執行客戶端程式UserClient,控制檯輸出如下

[html] view plain copy 
  1. ****增加使用者addUser****
  2. ****查詢所有getAllUsers****
  3. [{"userId":"006","userName":"Susan","age":"21"}]
  4. ****修改使用者updateUser****
  5. ****根據id查詢使用者****
  6. 006Susan33
  7. ****查詢所有getAllUsers****
  8. [{"userId":"006","userName":"Susan","age":"33"}]
  9. ****刪除使用者****
  10. ****查詢所有getAllUsers****
  11. []

五、總結

1.客戶端如果需要進行JSON轉換,需要進行JSON註冊

[java] view plain copy 
  1. Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);

2.WebTarget 指明瞭要請求的資源的地址

3.target.request(). 後面跟的是請求的方法:POST,GET,PUT或DELETE

*重點來了:現在可以用Firefox工具RESTClient