31

私はこのような残りのURLを持っていますhttp://www.localhost.com/service/resource?status=ACTIVE,PASSIVEそして私はこのようなメソッドを持っています

@GET
public Resource resource(@QueryParam("status") Collection<STATUS> statusList){
}

STATUSは列挙型ですか?

public enum STATUS{
    ACTIVE,PASSIVE,DISABLED
}

私の質問は、クエリパラメータステータスをジャージの列挙型ステータスのリストに自動的に変換する方法がありますか、それともこれのために独自のプロバイダーを作成する必要がありますか?

4

3 に答える 3

56

Javadocから、@QueryParam注釈付きタイプは次のいずれかである必要があります。

  1. プリミティブ型である
  2. 単一のString引数を受け入れるコンストラクターがあります
  3. 名前付きvalueOfまたはfromString単一のString引数を受け入れる静的メソッドを用意します(たとえば、を参照Integer.valueOf(String)
  4. 上記の2または3を満たす場合はList<T>Set<T>またはSortedSet<T>、になります。T結果のコレクションは読み取り専用です。

あなたの場合、列挙型を単純なクラスでラップすることにより、2番目のオプションを使用します。

public class StatusList {
  private List<STATUS> statusList;

  public StatusList(String toParse) {
    //code to split the parameter into a list of statuses 
  }

  public List<STATUS> getStatusList() {
    return this.statusList;
  }
}

次に、メソッドを次のように変更します。

@GET
public Resource resource(@QueryParam("status") StatusList statusList){
}
于 2012-07-18T06:43:11.987 に答える
9

このメソッドを列挙型に追加します。

public static YourEnum fromString(final String s) {
    return YourEnum.valueOf(s);
}
于 2016-03-25T08:39:30.807 に答える
7

これを試してください:

http://www.localhost.com/service/resource?status=ACTIVE&status=PASSIVE
@QueryParam("status") List<STATUS> statusList
于 2012-12-25T22:19:22.877 に答える