Мне нужно иметь возможность запрашивать ресурс с фильтром со многими параметрами (все варианты)
моя спецификация url выглядит примерно так:
GET http://something/version/resource?f={"param1":"1","param2":"something else", "param3":"tomato"
Я попробовал два подхода:
@XmlRootElement
поэтому я создал фильтр класса и аннотировал его с помощью @XmlRootElement
но параметры не анализируются в моем классе.@XmlRootElement
MyClassFilter{
String param1;
String param2;
..........
}
@BeanParam
поэтому я удалил аннотацию @XmlRootElement
и я поместил аннотацию @QueryParam
для каждого поля в классе и в методе ресурсов я поместил @BeanParam
.MyClassFilter{
@QueryParam("param1")
String param1;
@QueryParam("param2")
String param2;
..........
}
Я получаю null
объекты с обоими методами. Может ли кто-нибудь указать мне в правильном направлении? Я обычно потребляю услуги, поэтому у меня нет большого опыта на стороне сервера.
Вы можете использовать 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;
}
}
Я решил свою проблему, в моем методе get я получаю фильтр как строку:
@QueryParam(value = "f") String f
и я разбираю его с помощью ObjectMapper:
ObjectMapper mapper = new ObjectMapper();
EntityFilter filter = mapper.readValue(f, EntityFilter.class);