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
Responseでtype()メソッドを使用する代わりに、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 HTML。 MediaType.TEXT_XMLまたはMediaType.TEXT_HTMLを使用してXMLまたはHTMLであることをJerseyに通知するだけで、残りはJerseyが処理します。 __