11

私はいくつかの REST サービス (アプリケーション/json の消費と生成) を持っており、@TypeHintドキュメントの生成に使用しています。

今、私はこのようなものを持っています:

import javax.ws.rs.core.Response;
...

@Path("/path")
public class MyClass {

    @GET
    @TypeHint(MyResponse.class)
    public Response getIt() {

        MyResponse resp = ... ;
        return MyBuilder.build(resp);
    }
}

しかしMyResponse、のラッパーList<MyType>です。

私のbuildメソッドはMyResponse次のようになります。

public static Response build(Serializable payload) {
    return Response.ok(msr).header(...).build();
}

List<MyType>の代わりに直接使いたいMyResponseTypeHint次のコードで使用する最良の方法はどれですか?

    @GET
    @TypeHint(/* TODO */)
    public Response getIt() {

        List<MyType> myList = ... ;
        return MyBuilder.build(myList);
    }

私は次のオプションを考えていました:

  1. @TypeHint(List.class)
  2. @TypeHint(MyType.class)
  3. @TypeHint(List<MyType>.class)-> 残念ながら、これは Java 型消去のために機能しません。

質問:

番号 3の有効な代替手段はありますか?


タイプが a であっても、自分のタイプに注釈を付ける必要があり、それは変更できないためList、番号1は役に立ちません (JDK からのものです)。@XmlRootElementList

番号2には回避策がありますが、完全ではありません。

  • 番号 2 を使用します (生成された HTML ドキュメントで使用可能な例を使用するためだけです - そのリストに含まれる要素の説明)
  • ListJavadoc 内にあることを指定します(例:@return単語の後ろ) (HTML タグを介して太字、色、斜体などを使用して強調できます)

    例えば:

    /**
     * ...
     * @return <strong><font color="blue">List&lt;MyType&gt;</font></strong>
     */
    

詳細:

  • enunciate.version = 1.30.1
  • Java 7
4

2 に答える 2

1

ご存じのように、 TypeHintは、JAX-RSリソース メソッドが入力パラメーターとして返すものまたは受け入れるものに関するヒントを Enunciate に与えるために使用されます。

あなたの場合、戻り値の型が説明されています。

ClassReturnedByMyBuildersBuildMethod は、javax.ws.rs.core.Response 抽象クラスのサブクラスであると想定しています。あなたが示したコードの場合、使用する必要があるのは、MyBuilder のビルド メソッドによって返されるクラスです - @TypeHint(ClassReturnedByMyBuildersBuildMethod.class)

オプション 2 @TypeHint(MyType.class) は意味がありません。戻り型でも入力パラメーターでもありません。

更新1:回避策を使用すると、ある程度の意味があります:)

getIt メソッドに入力パラメーターを追加する場合 -オプション1 public Response getIt(List<MyType> myList){...( ) を使用するよう@TypeHint(List.class)なものですパラメータ化された型は、ジェネリック型が消去されるためです (この場合、パラメータ化された型は実行時に同じクラスを共有します - List )。Class<?> value();

しかし、入力パラメーターを に変更することgetIt(List<MyType> myList) はおそらく実行可能ではありません。これは、リストを URI から取得する必要があるためです (javax.ws.rs の @QueryParam または @Context UriInfo を使用)。この質問は、パラメータのリストを入力として使用する場合のベスト プラクティスに対応しています。

更新 2: XmlRootElement 制約のため、オプション 1 は実行可能性が低くなります。

更新 3: TypeHint アノテーションをそのまま使用するオプション 3 の有効な代替手段はありません。

カスタム オプション 2 の回避策を使用する必要があります。

于 2015-06-03T13:59:22.357 に答える