通过jersey-client客户端调用Jersey的Web服务模拟CURD

时间:2021-08-04 02:19:09
一、总体说明

通过jersey-client接口,创建客户端程序,来调用Jersey实现的RESTful服务,实现增、删、改、查等操作。

服务端主要是通过内存的方式,来模拟用户的增加、删除、修改、查询等操作。

二、创建服务端

1.在上文项目中,

在“com.waylau.rest.resources.UserResource“中修改代码,

首先创建一个HashMap,用来保存添加的用户

[java] view plain copy 通过jersey-client客户端调用Jersey的Web服务模拟CURD通过jersey-client客户端调用Jersey的Web服务模拟CURD
  1. private static Map<String,User> userMap  = new HashMap<String,User>();

2.创建增、删、改、查 用户资源等操作

[java] view plain copy 通过jersey-client客户端调用Jersey的Web服务模拟CURD通过jersey-client客户端调用Jersey的Web服务模拟CURD
  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 通过jersey-client客户端调用Jersey的Web服务模拟CURD通过jersey-client客户端调用Jersey的Web服务模拟CURD
  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 通过jersey-client客户端调用Jersey的Web服务模拟CURD通过jersey-client客户端调用Jersey的Web服务模拟CURD
  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 通过jersey-client客户端调用Jersey的Web服务模拟CURD通过jersey-client客户端调用Jersey的Web服务模拟CURD
  1. Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);

2.WebTarget 指明了要请求的资源的地址

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

*重点来了:现在可以用Firefox工具RESTClient