1. 概述
Jersey 是一個開源框架,用於開發 RESTful Web 服務。它還具有強大的內置客户端功能。
在本快速教程中,我們將探索使用 Jersey 2 創建 JAX-RS 客户端。
對於使用 Jersey 創建 RESTful Web 服務方面的討論,請參閲本文。
2. Maven 依賴
讓我們首先在 <em >pom.xml</em > 中添加所需的依賴項(用於 Jersey JAX-RS 客户端):
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25.1</version>
</dependency>要使用 Jackson 2.x 作為 JSON 提供程序:
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.25.1</version>
</dependency>這些依賴項的最新版本可以在 jersey-client 和 jersey-media-json-jackson 找到。
3. 使用 Jersey 構建 RESTful 客户端
我們將開發一個 JAX-RS 客户端,用於消費我們在此處開發的 JSON 和 XML REST API。 (請確保服務已部署且 URL 可訪問)。
3.1. 資源表示類
讓我們來查看資源表示類:
@XmlRootElement
public class Employee {
private int id;
private String firstName;
// standard getters and setters
}JAXB 註解,如 @XmlRootElement,僅在需要 XML 支持時才需要使用。
3.2. 創建客户端實例
我們需要首先創建一個客户端實例:
Client client = ClientBuilder.newClient();3.3. 創建 WebTarget
在獲取 Client 實例後,我們可以使用目標 Web 資源的 URI 創建 WebTarget:
WebTarget webTarget
= client.target("http://localhost:8082/spring-jersey");使用 WebTarget,我們可以定義指向特定資源的路徑:
WebTarget employeeWebTarget
= webTarget.path("resources/employees");3.4. 構建 HTTP 請求調用
一個調用構建器實例是通過以下 WebTarget.request()方法之一創建的:
Invocation.Builder invocationBuilder
= employeeWebTarget.request(MediaType.APPLICATION_JSON);對於XML格式,MediaType.APPLICATION_XML 可用於使用。
3.5. 調用 HTTP 請求
調用 HTTP GET:
Response response
= invocationBuilder.get(Employee.class);<p>調用 HTTP POST:</p>
Response response
= invocationBuilder
.post(Entity.entity(employee, MediaType.APPLICATION_JSON);3.6. 示例 REST 客户端
讓我們開始編寫一個簡單的 REST 客户端。<em >getJsonEmployee()</em> 方法根據員工的 id 檢索一個 Employee 對象。REST Web 服務返回的 JSON 將在返回之前反序列化為 Employee 對象。
使用 JAX-RS API 輕鬆創建 Web 目標、調用構建器並調用 GET HTTP 請求:
public class RestClient {
private static final String REST_URI
= "http://localhost:8082/spring-jersey/resources/employees";
private Client client = ClientBuilder.newClient();
public Employee getJsonEmployee(int id) {
return client
.target(REST_URI)
.path(String.valueOf(id))
.request(MediaType.APPLICATION_JSON)
.get(Employee.class);
}
//...
}現在我們添加一個用於 POST HTTP 請求的方法。<em>createJsonEmployee()</em> 方法通過調用 REST Web Service 創建 <em>Employee</em> 對象。客户端 API 在調用 HTTP POST 方法之前,會將 <em>Employee</em> 對象序列化為 JSON:
public Response createJsonEmployee(Employee emp) {
return client
.target(REST_URI)
.request(MediaType.APPLICATION_JSON)
.post(Entity.entity(emp, MediaType.APPLICATION_JSON));
}4. 測試客户端
讓我們使用 JUnit 測試我們的客户端:
public class JerseyClientLiveTest {
public static final int HTTP_CREATED = 201;
private RestClient client = new RestClient();
@Test
public void givenCorrectObject_whenCorrectJsonRequest_thenResponseCodeCreated() {
Employee emp = new Employee(6, "Johny");
Response response = client.createJsonEmployee(emp);
assertEquals(response.getStatus(), HTTP_CREATED);
}
}結論
本文介紹了使用 Jersey 2 構建 JAX-RS 客户端,並開發了一個簡單的 RESTful Java 客户端。