ジャージーリクエストパラメータを調べる

1. 前書き

link:/jersey-jax-rs-client [ジャージー]
このチュートリアルでは、単純なジャージープロジェクトを介してさまざまなリクエストパラメータタイプを読み取る方法を探ります。

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
}
ちなみに、https://www.baeldung.com/jersey-rest-api-with-spring [JerseyはSpringコントローラーでも動作します]に注意してください。

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

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

  • 単一の_String_引数を持つコンストラクターを持つ型

  • fromStringString

  • コレクション–タイプの_List Set_、および_SortedSet –_など
    上記の

    また、_ParamConverterProvider_ * JAX-RS拡張SPIの実装を*登録できます。 _String_から型への変換が可能な_ParamConverter_インスタンス。
Jerseyメソッドで_ @ CookieParam_アノテーションを使用してlink:/cookies-java[cookie values]を解決できます。
@GET
public String jsessionid(@CookieParam("JSESSIONId") String jsessionId) {
    return "Cookie parameter value is [" + jsessionId+ "]";
}
> curl --cookie "JSESSIONID=5BDA743FEBD1BAEFED12ECE124330923" http://localhost:8080/myapp/items
Cookie parameter value is [5BDA743FEBD1BAEFED12ECE124330923]
_ @ HeaderParam_アノテーション:
@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. パスパラメータ

特にRESTful APIでは、パスに情報を含めるのが一般的です。
_ @ 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. クエリパラメータ

このような値を読み取るには、_ @ 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 + "]";
}
> 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. 行列パラメーター

  • https://www.baeldung.com/spring-mvc-matrix-variables [マトリックスパラメーター]は、URLのどこにでも追加できるため、より柔軟なクエリパラメーターです。*

    このような値を読み取るには、利用可能な_ @ 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パラメーターを使用して要求パラメーターを結合する方法を確認します。 明確にするために、https://www.baeldung.com/jersey-bean-validation [a bean parameter]は、実際にはさまざまなタイプの要求パラメーターを組み合わせたオブジェクトです。
ここでは、ヘッダーパラメーター、パス、フォームを使用します。
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つのタイプのパラメーターを追加し、単一の_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を使用してリクエストからさまざまなパラメーターを読み取る方法を検討できるようにしました。
これらすべてのスニペットの実装は、https://github.com/eugenp/tutorials/tree/master/jersey [Github上]で入手できます。