2017-03-07 121 views
0

我RestEasy的端点接口声明如下:resteasy,如何初始化用于代理客户端调用的@Context UriInfo参数?

@Path("/entity") 
public interface EntitySearchEndpoint { 
... 
    @GET 
    @Path("/search") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response search(@Context UriInfo ui); 
... 
} 

现在我使用

ResteasyClient reClient = new ResteasyClientBuilder().build(); 
ResteasyWebTarget webTarget = reClient.target(URI.create("http://example.com")); 
EntitySearchEndpoint entitySearchEndpoint = ncspAPIWebTarget.proxy(EntitySearchEndpoint.class); 

现在我能够使用

UriInfo ui = ??? 
Response response = entitySearchEndpoint.search(ui); 

我的问题来调用服务的接口创建的代理客户端是如何创建UriInfo实例以仅包含所需的查询参数?
可能使用@Context UriInfo作为参数是不正确的,什么是正确的方法?
QueryParam名称列表中没有限制,任何名称被允许...

回答

0

如果我明白你想正确,你的API可以是这个样子的:

@Path("/entity") 
public interface EntitySearchEndpoint { 
... 
    @GET 
    @Path("/search/{searchQuery}") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response search(@PathParam("searchQuery") String searchQuery); 
... 
} 

和你的客户会叫它用绳子:

Response response = entitySearchEndpoint.search("test string"); 
+0

谢谢兰迪,我终于找到了解决办法,现在我甚至不记得它,但我会尽力在这里以后写。重点是,搜索参数是在查询parametrs,意味着问号'?paam1 = value1&param2 = value2&.....' – mirec

+0

我看,那么你可能使用@QueryParam。我不会使用UriInfo(它不会像这样的参数传递),因为看着你的api代码的人不会意识到它有输入。 QueryParam更清晰。 – Randy

+0

是的,但参数的数量可能会有所不同,其名称也可能会有所不同... – mirec