2017-03-07 126 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