复杂对象作为java rest应用程序中的查询参数

时间:2016-09-22 18:19:02

标签: java rest jersey jackson query-parameters

我需要能够使用包含许多参数(所有选项)的过滤器查询资源

我的网址规范是这样的:

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

我尝试了两种方法:

  1. @XmlRootElement所以我创建了一个类过滤器,并使用@XmlRootElement对其进行了注释,但参数未被解析到我的类中。
  2. @XmlRootElement    
    MyClassFilter{
       String param1;
       String param2;
       ..........
    
    }
    
    1. @BeanParam所以我删除了@XmlRootElement注释,并为类中的每个字段添加了@QueryParam注释,并在资源方法中添加了@BeanParam注释。 / LI>
      MyClassFilter{
         @QueryParam("param1")
         String param1;
         @QueryParam("param2")
         String param2;
         ..........
      
      }   
      

      我用两种方法得到null个对象。有人能指出我正确的方向吗?我经常使用这些服务,因此我在服务器端没有太多经验。

2 个答案:

答案 0 :(得分:0)

我解决了我的问题,在我的get方法中,我收到了一个字符串过滤器:

@QueryParam(value = "f") String f

我使用ObjectMapper解析它:

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

答案 1 :(得分: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;
    }
}