48.4. 汎用型情報を含むエンティティーの返答


概要

アプリケーションで、返されたオブジェクトの MIME タイプや、応答のシリアル化に使用するエンティティープロバイダーを詳細に制御する必要がある場合があります。JAX-RS javax.ws.rs.core.GenericEntity<T> クラスは、エンティティーを表すオブジェクトの汎用型を指定するメカニズムを提供することで、エンティティーのシリアライズに対する詳細な制御を可能にします。

GenericEntity<T> オブジェクトの使用

応答をシリアライズするエンティティープロバイダーの選択に使用される基準の 1 つは、オブジェクトの汎用型です。オブジェクトの汎用型はオブジェクトの Java 型を表します。一般的な Java 型または JAXB オブジェクトが返されると、ランタイムは Java リフレクションを使用して汎用型を判断できます。ただし、JAX-RS Response オブジェクトが返されると、ランタイムはラップされたエンティティーの汎用型を決定できず、オブジェクトの実際の Java クラスが Java 型として使用されます。

エンティティープロバイダーに正しい汎用型情報が提供されるようにするため、エンティティーは返された Response オブジェクトに追加される前に、GenericEntity<T> オブジェクトでラップされます。

リソースメソッドは、GenericEntity<T> オブジェクトを直接返すこともできます。実際には、このアプローチはほぼ使用されません。通常、ラップされていないエンティティーのリフレクションによって決定される汎用型情報や、GenericEntity<T> オブジェクトでラップされたエンティティーに格納される汎用型情報は、通常同じです。

GenericEntity<T> オブジェクトの作成

GenericEntity<T> オブジェクトを作成する方法は 2 つあります。

  1. ラップされるエンティティーを使用して GenericEntity<T> クラスのサブクラスを作成します。サブクラスを使用した GenericEntity<T> オブジェクトの作成 は、実行時に利用可能な汎用型を持つ型 List<String> のエンティティーが含まれる GenericEntity<T> オブジェクトを作成する方法を示しています。

    サブクラスを使用した GenericEntity<T> オブジェクトの作成

    import javax.ws.rs.core.GenericEntity;
    
    List<String> list = new ArrayList<String>();
    ...
    GenericEntity<List<String>> entity =
      new GenericEntity<List<String>>(list) {};
    Response response = Response.ok(entity).build();

    GenericEntity<T> オブジェクトの作成に使用されるサブクラスは通常、匿名です。

  2. エンティティーに汎用型情報を指定して、インスタンスを直接作成します。例48.2「GenericEntity<T> オブジェクトの直接インスタンス化」 は、AtomicInteger 型のエンティティーが含まれる応答を作成する方法を示しています。

    例48.2 GenericEntity<T> オブジェクトの直接インスタンス化

    import javax.ws.rs.core.GenericEntity;
    
    AtomicInteger result = new AtomicInteger(12);
    GenericEntity<AtomicInteger> entity =
      new GenericEntity<AtomicInteger>(result,
                                          result.getClass().getGenericSuperclass());
    Response response = Response.ok(entity).build();
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.