1概要

REST WebサービスとそのクライアントのJavaでの開発を簡単にするために、標準で移植性のある

JAX-RS

APIの実装が設計されました。

Jerseyは、

JAX-RS

APIをサポートし、

JAX-RS

参照実装として機能するREST Webサービスを開発するためのオープンソースフレームワークです。

このチュートリアルでは、さまざまなメディアタイプで

Jersey

レスポンスボディを設定する方法について説明します。


2 Mavenの依存関係

まず、

pom.xml

ファイルに含まれる以下の依存関係が必要です。

<dependency>
    <groupId>org.glassfish.jersey.bundles</groupId>
    <artifactId>jaxrs-ri</artifactId>
    <version>2.26</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.26</version>
</dependency>


JAX-RS

の最新バージョンはhttps://search.maven.org/search?q=g:org.glassfish.jersey.bundles%20AND%20a:jaxrs-ri&core=gav[jaxrs-ri]で見つけることができます。と

Jersey

サーバーはhttps://search.maven.org/search?q=g:org.glassfish.jersey.core%20AND%20a:jersey-server&core=gav[jersey-server]にあります。


3ジャージーでの返答

当然、

Jersey

を使用してレスポンスを作成する方法はいくつかあります。以下でそれらを作成する方法を検討します。

ここに示す例はすべてHTTP GETリクエストです。リソースをテストするには

curl

コマンドを使用します。


3.1. わかりましたテキスト応答

ここに示すエンドポイントは、プレーンテキストをJerseyの応答として返す方法の簡単な例です。

@GET
@Path("/ok")
public Response getOkResponse() {

    String message = "This is a text response";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .build();
}

応答を検証するために

curl

を使用してHTTP GETを実行できます。

curl -XGET http://localhost:8080/jersey/response/ok

このエンドポイントは次のように応答を返します。

This is a text response

メディアタイプが指定されていない場合、** Jerseyはデフォルトでtext/plainになります。


3.2. エラー応答

  • エラーはJerseyの応答として** 送り返すこともできます。

@GET
@Path("/not__ok")
public Response getNOkTextResponse() {

    String message = "There was an internal server error";

    return Response
      .status(Response.Status.INTERNAL__SERVER__ERROR)
      .entity(message)
      .build();
}

応答を確認するために、

curl

を使用してHTTP GETリクエストを実行できます。

curl -XGET http://localhost:8080/jersey/response/not__ok

エラーメッセージはレスポンスで返送されます。

There was an internal server error


3.3. テキストで表示

  • 単純なプレーンテキストの応答** を返すこともできます。

@GET
@Path("/text__plain")
public Response getTextResponseTypeDefined() {

    String message = "This is a plain text response";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .type(MediaType.TEXT__PLAIN)
      .build();
}

繰り返しますが、応答を検証するために

curl

を使用してHTTP GETを実行できます。

curl -XGET http://localhost:8080/jersey/response/text__plain

応答は次のようになります。

This is a plain text response


Response



type()

メソッドを使う代わりに、

__Produces

__アノテーションを使っても同じ結果が得られます。

@GET
@Path("/text__plain__annotation")
@Produces({ MediaType.TEXT__PLAIN })
public Response getTextResponseTypeAnnotated() {

    String message = "This is a plain text response via annotation";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .build();
}


curl

を使用してレスポンス検証を行うことができます。

curl -XGET http://localhost:8080/jersey/response/text__plain__annotation

応答は次のとおりです。

This is a plain text response via annotation


3.4. POJO

を使用したJSONレスポンス

単純な

Plain Old Java Object(POJO)を使用してJersey応答を構築することもできます

以下に示す非常に単純な

Person

POJOがあります。これを使用して応答を作成します。

public class Person {
    String name;
    String address;

   //standard constructor
   //standard getters and setters
}


Person

POJOを使用して、レスポンスボディとしてJSONを返すことができます。

@GET
@Path("/pojo")
public Response getPojoResponse() {

    Person person = new Person("Abhinayak", "Nepal");

    return Response
      .status(Response.Status.OK)
      .entity(person)
      .build();
}

このGETエンドポイントの動作は、次の

curl

コマンドを介して確認できます。

curl -XGET http://localhost:8080/jersey/response/pojo

Person POJOはJSONに変換され、応答として返送されます。

{"address":"Nepal","name":"Abhinayak"}


3.5. 単純な文字列を使用したJSONレスポンス

応答を作成するために** フォーマット済みの文字列を使用することができます。それは簡単に実行できます。

次のエンドポイントは、

String

として表されるJSONをJersey応答でJSONとして返す方法の例です。

@GET
@Path("/json")
public Response getJsonResponse() {

    String message = "{\"hello\": \"This is a JSON response\"}";

    return Response
      .status(Response.Status.OK)
      .entity(message)
      .type(MediaType.APPLICATION__JSON)
      .build();
}

これは、

curl

を使用してHTTP GETを実行して応答を確認することで確認できます。

curl -XGET http://localhost:8080/jersey/response/json

このリソースを呼び出すとJSONが返されます。

{"hello":"This is a JSON response"}

  • 同じパターンが、XMLやHTMLなどの他の一般的なメディアタイプにも適用されます。

    MediaType.TEXT

    XML

    または

    MediaType.TEXT

    HTML

    を使用したXMLまたはHTMLであることをJerseyに通知するだけで、残りはJerseyが処理します。


4結論

このクイック記事では、さまざまなメディアタイプに対してJersey(JAX-RS)レスポンスを作成しました。

この記事に記載されているすべてのコードスニペットは、https://github.com/eugenp/tutorials/tree/master/jersey[GitHubに追加]にあります。

  • **