Подтвердить что ты не робот

Связывание QueryParam с перечислением в трикотаже

У меня есть 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
}

Мой вопрос: есть ли способ, чтобы статус param запроса был автоматически преобразован в список типа STATUS типа enum в jersey или мне нужно написать для этого своего собственного провайдера?

4b9b3361

Ответ 1

Из JSR 311 API аннотированный тип @QueryParam должен либо:

  • Будьте примитивным типом
  • У конструктора, который принимает один аргумент String
  • Имейте статический метод с именем valueOf или fromString, который принимает единственный аргумент String (см., например, Integer.valueOf(String))
  • Be 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){
}

Ответ 2

Попробуйте следующее:

http://www.localhost.com/service/resource?status=ACTIVE&status=PASSIVE

@QueryParam("status")List <STATUS> statusList

Ответ 3

Добавьте этот метод к вашему перечислению:

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