JAX-RSでレスポンスボディを設定する

JAX-RSで応答本文を設定する

**

1. 概要

JavaでのRESTWebサービスとそのクライアントの開発を簡素化するために、Jerseyと呼ばれるJAX-RSAPIの標準でポータブルな実装が設計されています。

Jerseyは、JAX-RS APIのサポートを提供し、JAX-RSリファレンス実装として機能するRESTWebサービスを開発するためのオープンソースフレームワークです。

このチュートリアルでは、さまざまなメディアタイプでJersey応答本文を設定する方法を見ていきます。

2. Mavenの依存関係

まず、pom.xmlファイルに次の依存関係を含める必要があります。


    org.glassfish.jersey.bundles
    jaxrs-ri
    2.26


    org.glassfish.jersey.core
    jersey-server
    2.26

JAX-RSの最新バージョンはjaxrs-riにあり、Jerseyサーバーはjersey-serverにあります。

3. ジャージーでの対応

当然、Jerseyを使用して応答を作成するにはさまざまな方法があります。以下では、それらを作成する方法について説明します。

ここでの例はすべてHTTPGETリクエストであり、curlコマンドを使用してリソースをテストします。

3.1. OKテキスト応答

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

@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 will default to text/plain.

3.2. エラー応答

ジャージー応答としてのErrors can also be sent back

@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を使用してHTTPGETリクエストを実行できます。

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

エラーメッセージが応答で返されます。

There was an internal server error

3.3. プレーンテキストの応答

simple plain text responsesを返すこともできます。

@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

Responsetype()メソッドを使用する代わりに、Produces annotationを使用しても同じ結果を得ることができます。

@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) can also be used build a Jersey response

以下に示す非常に単純なPerson POJOがあり、これを使用して応答を作成します。

public class Person {
    String name;
    String address;

    // standard constructor
    // standard getters and setters
}

Person POJOをreturn JSON as the Response bodyに使用できるようになりました。

@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応答

preformatted strings to create a responseを使用でき、簡単に実行できます。

次のエンドポイントは、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"}

The same pattern applies for other common media types like XML or HTMLMediaType.TEXT_XMLまたはMediaType.TEXT_HTMLを使用してXMLまたはHTMLであることをJerseyに通知するだけで、残りはJerseyが処理します。 __

4. 結論

この簡単な記事では、さまざまなメディアタイプに対するジャージー(JAX-RS)応答を作成しました。

記事に記載されているすべてのコードスニペットは、over on GitHubにあります。

**