1. 概要

Jerseyは、RESTFulWebサービスを開発するためのオープンソースフレームワークです。 また、優れたクライアント機能も組み込まれています。

このクイックチュートリアルでは、 Jersey2を使用したJAX-RSクライアントの作成について説明します。

ジャージーを使用したRESTfulWebサービスの作成に関する議論については、この記事を参照してください。

2. Mavenの依存関係

pom.xml に必要な依存関係(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. ジャージーのRESTFulクライアント

ここで開発したJSONおよびXMLRESTAPIを使用するJAX-RSクライアントを開発します(サービスがデプロイされ、URLにアクセスできることを確認する必要があります)。

3.1. リソース表現クラス

リソース表現クラスを見てみましょう。

@XmlRootElement
public class Employee {
    private int id;
    private String firstName;

    // standard getters and setters
}

@XmlRootElement のようなJAXBアノテーションは、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()メソッドの1つで作成されます。

Invocation.Builder invocationBuilder 
  = employeeWebTarget.request(MediaType.APPLICATION_JSON);

XML形式の場合、MediaType.APPLICATION_XMLを使用できます。

3.5. HTTPリクエストの呼び出し

HTTP GETの呼び出し:

Response response 
  = invocationBuilder.get(Employee.class);

HTTP POSTの呼び出し:

Response response 
  = invocationBuilder
  .post(Entity.entity(employee, MediaType.APPLICATION_JSON);

3.6. サンプルRESTクライアント

簡単なRESTクライアントの作成を始めましょう。 getJsonEmployee()メソッドは、従業員idに基づいてEmployeeオブジェクトを取得します。 REST Webサービスによって返されるJSONは、返される前にEmployeeオブジェクトに逆シリアル化されます。

JAX-RS APIを流暢に使用してWebターゲットを作成し、ビルダーを呼び出し、GETHTTPリクエストを呼び出します。

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);
    }
    //...
}

次に、POSTHTTPリクエストのメソッドを追加しましょう。 createJsonEmployee()メソッドは、Employee作成のためにRESTWebサービスを呼び出すことにより、Employeeを作成します。 クライアントAPIは、HTTP POSTメソッドを呼び出す前に、 Employeeオブジェクトを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);
    }
}

5. 結論

この記事では、Jersey 2を使用したJAX-RSクライアントを紹介し、単純なRESTFulJavaクライアントを開発しました。

いつものように、完全なソースコードはこのGithubプロジェクトで入手できます。