QueryParam与jersey中的枚举绑定

时间:2012-07-17 20:49:11

标签: rest jersey

我有一个像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列表,还是我必须为此编写自己的提供程序?

3 个答案:

答案 0 :(得分:49)

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

  1. 是原始类型
  2. 拥有一个接受单个String参数的构造函数
  3. 有一个名为valueOffromString的静态方法,它接受一个String参数(例如,参见Integer.valueOf(String)
  4. List<T>Set<T>SortedSet<T>,其中T满足上述2或3。生成的集合是只读的。
  5. 对于你的情况,我会通过将枚举包装在一个简单的类中来使用第二个选项:

    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){
    }
    

答案 1 :(得分:5)

试试这个:

http://www.localhost.com/service/resource?status=ACTIVE&status=PASSIVE
@QueryParam("status") List<STATUS> statusList

答案 2 :(得分:3)

将此方法添加到枚举:

public static YourEnum fromString(final String s) {
    return YourEnum.valueOf(s);
}