我创建了一个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
答案 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();
}