原文: https://howtodoinjava.com/resteasy/restful-webservices-client-using-java-net-package/

到目前为止,在此博客中,我们已经学习了有关构建服务器端组件 RESTful Web 服务的知识。 在本文中,我们将学习构建一个 RESTful 客户端,以使用先前文章中编写的 Web 服务。

我将重新使用为 RESTEasy + JAXB xml 示例编写的代码库。 我将构建一个不使用任何第三方工具的纯 Java API 客户端。

1)构建 RESTful Web 服务 API

请遵循 RESTEasy + JAXB xml 示例中给出的步骤。

作为参考,服务和模型类为:

UserManagementModule.java

  1. package com.howtodoinjava.service;
  2. import javax.ws.rs.GET;
  3. import javax.ws.rs.Path;
  4. import javax.ws.rs.PathParam;
  5. import javax.ws.rs.Produces;
  6. import javax.ws.rs.core.Response;
  7. import com.howtodoinjava.model.User;
  8. @Path("/user-management")
  9. public class UserManagementModule
  10. {
  11. @GET
  12. @Path("/users/{id}")
  13. @Produces("application/xml")
  14. public Response getUserById(@PathParam("id") Integer id)
  15. {
  16. User user = new User();
  17. user.setId(id);
  18. user.setFirstName("Lokesh");
  19. user.setLastName("Gupta");
  20. return Response.status(200).entity(user).build();
  21. }
  22. }

User.java

  1. package com.howtodoinjava.model;
  2. import java.io.Serializable;
  3. import javax.xml.bind.annotation.XmlAccessType;
  4. import javax.xml.bind.annotation.XmlAccessorType;
  5. import javax.xml.bind.annotation.XmlAttribute;
  6. import javax.xml.bind.annotation.XmlElement;
  7. import javax.xml.bind.annotation.XmlRootElement;
  8. @XmlAccessorType(XmlAccessType.NONE)
  9. @XmlRootElement(name = "user")
  10. public class User implements Serializable {
  11. private static final long serialVersionUID = 1L;
  12. @XmlAttribute(name = "id")
  13. private int id;
  14. @XmlElement(name = "firstName")
  15. private String firstName;
  16. @XmlElement(name = "lastName")
  17. private String lastName;
  18. public int getId() {
  19. return id;
  20. }
  21. public void setId(int id) {
  22. this.id = id;
  23. }
  24. public String getFirstName() {
  25. return firstName;
  26. }
  27. public void setFirstName(String firstName) {
  28. this.firstName = firstName;
  29. }
  30. public String getLastName() {
  31. return lastName;
  32. }
  33. public void setLastName(String lastName) {
  34. this.lastName = lastName;
  35. }
  36. }

2)创建 RESTFul Web 服务的用户客户端

我们的 Java 客户端基于java.net包 API。 我在这里做两个步骤:

  1. 以字符串格式捕获输出
  2. 从 xml 响应解组模型对象
  1. package test;
  2. import java.io.BufferedReader;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.io.StringReader;
  6. import java.net.HttpURLConnection;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import javax.xml.bind.JAXBContext;
  10. import javax.xml.bind.JAXBException;
  11. import javax.xml.bind.Unmarshaller;
  12. import com.howtodoinjava.model.User;
  13. public class PureJavaClient
  14. {
  15. public static void main(String[] args)
  16. {
  17. try
  18. {
  19. URL url = new URL("http://localhost:8080/RESTfulDemoApplication/user-management/users/10");
  20. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
  21. conn.setRequestMethod("GET");
  22. conn.setRequestProperty("Accept", "application/xml");
  23. if (conn.getResponseCode() != 200)
  24. {
  25. throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
  26. }
  27. BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
  28. String apiOutput = br.readLine();
  29. System.out.println(apiOutput);
  30. conn.disconnect();
  31. JAXBContext jaxbContext = JAXBContext.newInstance(User.class);
  32. Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
  33. User user = (User) jaxbUnmarshaller.unmarshal(new StringReader(apiOutput));
  34. System.out.println(user.getId());
  35. System.out.println(user.getFirstName());
  36. System.out.println(user.getLastName());
  37. } catch (MalformedURLException e) {
  38. e.printStackTrace();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. } catch (JAXBException e) {
  42. e.printStackTrace();
  43. }
  44. }
  45. }
  46. Output:
  47. <?xml version="1.0" encoding="UTF-8" standalone="yes"?><user id="10"><firstName>Lokesh</firstName><lastName>Gupta</lastName></user>
  48. 10
  49. Lokesh
  50. Gupta

单击以下链接下载此示例的源代码。

祝您学习愉快!