REST APIを取得するクライアントをJerseyで作る

#Technology

By gushernobindsme at

Jerseyとは?

Jersey RESTful Web Servicesフレームワークは、JAX-RS APIのサポートを提供し、JAX-RS(JSR 311およびJSR 339)リファレンス実装として機能する、JavaでRESTfulなWebサービスを開発するための、オープンソースで実動品質のフレームワークです。(https://jersey.java.net)

すごく雑に説明すると、REST APIからデータを取得するアプリケーションをJavaで簡単に作るためのライブラリ。労力抑え目でREST APIをどうこうしたい時に便利。

インストール

Mavenを使用する場合は、以下のdependencyを追加する。

<dependency>
  <groupId>com.sun.jersey</groupId>
  <artifactId>jersey-client</artifactId>
  <version>1.19.3</version>
</dependency>

REST APIからデータを取得する

使い方としては、ざっくり以下の3ステップでいける。

  • Clientのインスタンスを生成する
  • Client#resourceでデータを取得する。引数にはAPIのURLを指定する
  • WebResource#getでJSON形式のデータを取り出す

コードに起こすと以下のような感じ。

final Client client = Client.create();
final WebResource resource = client.resource("https://api.github.com/repos/spring-projects/spring-boot/issues");
final String json = resource.get(String.class);

JSONを任意のDTOにデシリアライズする

ここでは、JSONパーサーライブラリのJacksonを使う。

まずはMavenのdependencyを追加して、

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.8.8</version>
</dependency>

任意のDTOを作って、

@JsonIgnoreProperties(ignoreUnknown=true)
public class GitHubApiResponseDto {
    private String title;
    private String body;

    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getBody() {
        return body;
    }
    public void setBody(String body) {
        this.body = body;
    }
}

ObjectMapper#readValueすればOK。

final ObjectMapper mapper = new ObjectMapper();
List<GitHubApiResponseDto> results = new ArrayList<GitHubApiResponseDto>();
results = Arrays.asList(mapper.readValue(json, GitHubApiResponseDto[].class));

readValueメソッドはIOException、JsonParseException、JsonMappingExceptionをスローするので、適宜処理してください。

配布用Jarを作る

続いて、jarファイル単品で動作するよう、配布用のjarファイルをビルドする。
こちらも特に複雑なことはなくて、素直にmaven-assembly-pluginを使います。mainClassは各自の環境に応じて書き換えてください。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2</version>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <archive>
                    <manifest>
                        <mainClass>com.inmotion.Main</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
    </plugins>
</build>

あとは、mvn packageコマンドを実行してビルド実行。「(プロジェクト名)-jar-with-dependencies.jar」が作成されれば成功です。お疲れ様でした。

リポジトリ

参考