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
}

我的问题是有一种方法可以将查询参数状态自动转换为球衣中的枚举类型 STATUS 列表,还是我必须为此编写自己的提供程序?

4

3 回答 3

56

Javadoc中,带@QueryParam注释的类型必须:

  1. 成为原始类型
  2. 有一个接受单个String参数的构造函数
  3. 有一个名为valueOffromString接受单个String参数的静态方法(例如,参见Integer.valueOf(String)
  4. List<T>,Set<T>SortedSet<T>,T满足上述 2 或 3 的情况。生成的集合是只读的。

对于您的情况,我将通过将枚举包装在一个简单的类中来选择第二个选项:

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 回答