1. 序章

ジャージー は、RESTfulWebサービスを作成するための一般的なJavaフレームワークです。

このチュートリアルでは、単純なジャージープロジェクトを介してさまざまなリクエストパラメータタイプを読み取る方法について説明します。

2. プロジェクトの設定

Mavenアーキタイプを使用して、記事の作業プロジェクトを生成できます。

mvn archetype:generate -DarchetypeArtifactId=jersey-quickstart-grizzly2
  -DarchetypeGroupId=org.glassfish.jersey.archetypes -DinteractiveMode=false
  -DgroupId=com.example -DartifactId=simple-service -Dpackage=com.example
  -DarchetypeVersion=2.28

生成されたJerseyプロジェクトは、Grizzlyコンテナー上で実行されます。

現在、デフォルトでは、アプリのエンドポイントは http:// localhost:8080/myapp。になります。

実験に使用するitemsリソースを追加しましょう。

@Path("items")
public class ItemsController {
    // our endpoints are defined here
}

ちなみに、JerseyはSpringコントローラーでもうまく機能することに注意してください。

3. 注釈付きパラメータタイプ

したがって、実際にリクエストパラメータを読み取る前に、いくつかのルールを明確にしましょう。 許可されるパラメーターのタイプは次のとおりです。

  • floatcharなどのプリミティブタイプ
  • 単一のString引数を持つコンストラクターを持つ型
  • いずれかを持つタイプ fromString また valueOf静的メソッド; それらのために、 独身 引数は必須です
  • コレクション–上記のタイプの List Set SortedSet –など

また、ParamConverterProviderJAX-RS拡張SPIの実装を登録することもできます。 戻り型は、Stringから型に変換できるParamConverterインスタンスである必要があります。

4. クッキー

@CookieParam アノテーションを使用して、Jerseyメソッドのcookie値を解決できます。

@GET
public String jsessionid(@CookieParam("JSESSIONId") String jsessionId) {
    return "Cookie parameter value is [" + jsessionId+ "]";
}
コンテナを起動すると、このエンドポイントを cURL して、応答を確認できます。
> curl --cookie "JSESSIONID=5BDA743FEBD1BAEFED12ECE124330923" http://localhost:8080/myapp/items
Cookie parameter value is [5BDA743FEBD1BAEFED12ECE124330923]

5. ヘッダー

または、 @HeaderParamアノテーションを使用してHTTPヘッダーを解決できます。

@GET
public String contentType(@HeaderParam("Content-Type") String contentType) {
    return "Header parameter value is [" + contentType+ "]";
}

もう一度テストしてみましょう:

> curl --header "Content-Type: text/html" http://localhost:8080/myapp/items
Header parameter value is [text/html]

6. パスパラメータ

特にRESTfulAPIの場合、パスに情報を含めるのが一般的です。

@PathParamを使用してパス要素を抽出できます。

@GET
@Path("/{id}")
public String itemId(@PathParam("id") Integer id) {
    return "Path parameter value is [" + id + "]";
}

値が3の別のcurlコマンドを送信してみましょう。

> curl http://localhost:8080/myapp/items/3
Path parameter value is [3]

7. クエリパラメータ

オプション情報については、通常、RESTfulAPIでクエリパラメーターを使用します。

このような値を読み取るには、@QueryParamアノテーションを使用できます。

@GET
public String itemName(@QueryParam("name") String name) {
    return "Query parameter value is [" + name + "]";
}

これで、以前のようにcurlでテストできます。

> curl http://localhost:8080/myapp/items?name=Toaster
Query parameter value if [Toaster]

8. フォームパラメータ

フォーム送信からパラメータを読み取るには、 @FormParam 注釈:
@POST
public String itemShipment(@FormParam("deliveryAddress") String deliveryAddress, 
  @FormParam("quantity") Long quantity) {
    return "Form parameters are [deliveryAddress=" + deliveryAddress+ ", quantity=" + quantity + "]";
}

また、フォーム送信アクションを模倣するために、適切なContent-Typeを設定する必要があります。 -dフラグを使用してフォームパラメータを設定しましょう。

> curl -X POST -H 'Content-Type:application/x-www-form-urlencoded' \
  -d 'deliveryAddress=Washington nr 4&quantity=5' \
  http://localhost:8080/myapp/items
Form parameters are [deliveryAddress=Washington nr 4, quantity=5]

9. 行列パラメータ

マトリックスパラメータは、URLのどこにでも追加できるため、より柔軟なクエリパラメータです。

たとえば、 http:// localhost:8080 / myapp; name = value / items では、マトリックスパラメーターはnameです。

このような値を読み取るには、使用可能な@MatrixParamアノテーションを使用できます。

@GET
public String itemColors(@MatrixParam("colors") List<String> colors) {
    return "Matrix parameter values are " + Arrays.toString(colors.toArray());
}

次に、エンドポイントを再度テストします。

> curl http://localhost:8080/myapp/items;colors=blue,red
Matrix parameter values are [blue,red]

10. Beanパラメータ

最後に、Beanパラメータを使用してリクエストパラメータを組み合わせる方法を確認します。 明確にするために、 Beanパラメーターは、実際にはさまざまなタイプの要求パラメーターを組み合わせたオブジェクトです。

ここでは、ヘッダーパラメータ、パス、およびフォーム1を使用します。

public class ItemOrder {
    @HeaderParam("coupon")
    private String coupon;

    @PathParam("itemId")
    private Long itemId;

    @FormParam("total")
    private Double total;

    //getter and setter

    @Override
    public String toString() {
        return "ItemOrder {coupon=" + coupon + ", itemId=" + itemId + ", total=" + total + '}';
    }
}

また、このようなパラメーターの組み合わせを取得するには、@BeanParamアノテーションを使用します。

@POST
@Path("/{itemId}")
public String itemOrder(@BeanParam ItemOrder itemOrder) {
    return itemOrder.toString();
}

curl コマンドでは、これら3種類のパラメーターを追加し、最終的に1つのItemOrderオブジェクトになります。

> curl -X POST -H 'Content-Type:application/x-www-form-urlencoded' \
  --header 'coupon:FREE10p' \
  -d total=70 \
  http://localhost:8080/myapp/items/28711
ItemOrder {coupon=FREE10p, itemId=28711, total=70}

11. 結論

要約すると、Jerseyプロジェクトの簡単なセットアップを作成して、Jerseyを使用してリクエストからさまざまなパラメーターを読み取る方法を探るのに役立てています。

これらすべてのスニペットの実装は、Github利用できます。