2015-07-16 4 views
2

Есть ли способ изменить существующие параметры запроса с помощью фильтра джерси. У меня есть клиенты, переходящие в идентификаторах, как этоDropwizard/Jersey Изменение параметров запроса с использованием фильтра

/v1/пути? ID = 1,2,3

Что я хотел бы для них, чтобы показать в виде списка в моем ресурсе классе // класса ресурсов

public List<Something> getFilteredList(@QueryParam("id") List<String> ids) {// 

В настоящее время список идентификаторов содержит 1 строку, которая составляет 1,2,3. Я хотел бы применить фильтр и изменить любые параметры запроса, разделенные запятыми, на многозначные параметры, чтобы вместо этого метод ресурсов получал список.

Возможно ли это? Я попробовал фильтр, но параметры запроса, данные Джерси

ContainerRequestContext.getUriInfo().getQueryParameters() 

является неизменным.

Что такое хороший способ решить эту проблему?

ответ

1

Лучший способ, который я могу придумать, - создать класс-оболочку для списка. Это облегчает использование указанных функций Джерси. Вы можете видеть, что я имею в виду на Passing custom type query parameter.

Например

public class IdFilter { 
    private List<String> ids = new ArrayList<>(); 
    public List<String> getIds() { return ids; } 

    public static IdFilter valueOf(String param) { 
     IdFilter filter = new IdFilter(); 
     for (String id: param.split(",") { 
      filter.getIds().add(id); 
     } 
    } 
} 

getFilteredList(@QueryParam("id") IdFilter ids) { 

Нам не нужно делать что-нибудь еще. Просто, чтобы static valueOf достаточно, чтобы Джерси знал, как разбирать строку запроса.

Смежные вопросы