知識庫 / REST RSS 訂閱

JAX-RS 客户端與 Jersey

Jakarta EE,REST
HongKong
6
03:55 AM · Dec 06 ,2025

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-clientjersey-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 客户端。

user avatar
0 位用戶收藏了這個故事!
收藏

發佈 評論

Some HTML is okay.