1

Enunciate を使用して、Resteasy サービスのドキュメントを生成しています。必要なドキュメントを生成することはできますが、いくつかのカスタム パラメータに関して問題があります。

サービス インターフェイスは@QueryParam、メソッド実装がサポートするすべてのクエリ パラメータをリストするために使用されるカスタム アノテーションで構成されます。カスタム を使用することにした理由については、今は説明したくありません@QueryParam。それは単なるアーキテクチャ上の決定でした。

Enunciate はカスタムを認識しない@QueryParamため、すべての Resteasy メソッドには@QueryParamパラメーターがありません ( のみ@PathParam)。

サンプル サービス インターフェイス:

@GET
@Path("{regionId}/{userId}/validate-access")
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
@QueryParams(uniqueName = "validatePin", params = {
        @QueryParam(param = Param.PIN, isRequired = true),
        @QueryParam(param = Param.PIN_TYPE, isRequired = false, valueSet = { "valueA", "valueB" }, defaultValue = "valueA") })
StatusResponseResult validatePin(@Context HttpServletRequest hsr, @PathParam("regionId") int regionId,
        @PathParam("userId") int userId, @Context UriInfo info) throws RestApiException;

@QueryParam クラスの実装:

@Retention(RetentionPolicy.RUNTIME) 
public @interface QueryParam {
    public Param param();
    public boolean isRequired() default false;
    public boolean canBeEmpty() default true;
    public String defaultValue() default "";
    public String minValue() default "";
    public String maxValue() default "";
    public String format() default "";
    public String[] valueSet() default {};
}

@QueryParams クラスの実装:

@Retention(RetentionPolicy.RUNTIME)
public @interface QueryParams {
    String uniqueName();
    QueryParam[] params();
}

@QueryParam HTML ドキュメントを生成する際に、私のカスタムも考慮するように Enunciate に指示する方法はありますか?

4

2 に答える 2

0

アノテーションを使用して@ResourceMethodSignature、メソッドが何をしようとしているのかを Enunciate に明示的に伝えることができる場合があります。詳細はこちら。

@QueryParams注釈注釈の両方を適用してみることができる場合があります@QueryParam

@QueryParamsどちらも機能しない場合、私が考えることができる唯一のことは、カスタム注釈が宣言しようとしているモデルを設定するカスタム Enunciate モジュールを作成することです。詳細(ただし多くはない)情報はこちら。

于 2013-08-07T15:27:09.250 に答える
0

OK、@ResourceMethodSignature を使用すると、ドキュメント内のすべてのパラメーター (クエリとパス) を取得できます。唯一の欠点は、@ResourceMethodSignature 内でもう一度パラメーターをリストする必要があることです。新しいパラメーターを追加する (または削除する) ときに @ResourceMethodSignature も更新するのを忘れると、ドキュメントは非同期になります。

例:

@ResourceMethodSignature(
      pathParams = { @PathParam("regionId"),@PathParam("userId") },
      queryParams = { @javax.ws.rs.QueryParam("pin"), 
                      @javax.ws.rs.QueryParam("pin_type") }
)

すべての @javax.ws.rs.QueryParam を「読む」とき、他の注釈も考慮することができると思いますか?

于 2013-08-07T21:16:43.107 に答える