Сложный объект как параметр запроса в приложении Java отдыха

2

Мне нужно иметь возможность запрашивать ресурс с фильтром со многими параметрами (все варианты)

моя спецификация url выглядит примерно так:

GET http://something/version/resource?f={"param1":"1","param2":"something else", "param3":"tomato"

Я попробовал два подхода:

  1. @XmlRootElement поэтому я создал фильтр класса и аннотировал его с помощью @XmlRootElement но параметры не анализируются в моем классе.
@XmlRootElement    
MyClassFilter{
   String param1;
   String param2;
   ..........

}
  1. @BeanParam поэтому я удалил аннотацию @XmlRootElement и я поместил аннотацию @QueryParam для каждого поля в классе и в методе ресурсов я поместил @BeanParam.
MyClassFilter{
   @QueryParam("param1")
   String param1;
   @QueryParam("param2")
   String param2;
   ..........

}   

Я получаю null объекты с обоими методами. Может ли кто-нибудь указать мне в правильном направлении? Я обычно потребляю услуги, поэтому у меня нет большого опыта на стороне сервера.

Теги:
rest
jackson
query-parameters
jersey

2 ответа

0

Вы можете использовать ParamConverterProvider.

@Provider
public class JSONParamConverterProvider implements ParamConverterProvider {

    @Override
    public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation[] annotations) {
        if(rawType.equals(MyObject.class)){
            return (ParamConverter<T>) new JSONParamConverter();
        }
        return null;
    }
}
0

Я решил свою проблему, в моем методе get я получаю фильтр как строку:

@QueryParam(value = "f") String f

и я разбираю его с помощью ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
EntityFilter filter = mapper.readValue(f, EntityFilter.class);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню