使用queryParam在apache cxf中选择方法

时间:2014-05-13 08:11:37

标签: java rest path cxf

我创建了一个java rest资源,其中两个方法都在同一路径上侦听,但是一个@QueryParam注释作为方法参数

@Path("test")
public class TestResource {

    @GET
    public Response filter(){  
        System.out.println("init");
        return Response.accepted("Hello world").build();
    }

    @GET    
    public Response filterQuery(@QueryParam("filter") String filterQuery) {
        return Response.accepted("filter: " + filterQuery).build();
        //... parsing filter
    } 
}

但是当我在GET../test?filter=name:Juraj;location:Slovakia上尝试../test时,它始终会调用filter()方法

定义QueryParam以获取第二个方法是不够的?我想让用户在同一个网址上进行参数化,/test/filter?name=...

上的不是

我能以某种方式这样做吗? 使用apache-cxf 3.0.0-milestone2

1 个答案:

答案 0 :(得分:1)

定义@QueryParam并不意味着此参数是必需的。如果查询字符串为空或不包括已定义的query-param,则参数的值将为null

所以这两种方法都是模棱两可的,似乎第一个获胜。如果您需要两种方法,则可以轻松检查null并调用另一种方法。

@GET    
public Response filterQuery(@QueryParam("filter") String filterQuery) {
    if (filterQuery == null) {
        return filter();
    }
    return Response.accepted("filter: " + filterQuery).build();
} 

private Response filter() {  
    return Response.accepted("Hello world").build();
}