2016-10-13 55 views
0

我試圖寫一個REST Web服務的Java客戶端,這樣定義REST Web服務:Java客戶端與Netbeans的

@Path("/") 
public class Translator { 
    public Translator() { } 

    @POST 
    @Produces("application/json") 
    @Path("/translate") 
    public String translate(@QueryParam("dir") String dir, @QueryParam("string")String string, @QueryParam("user")String user, @QueryParam("key")String key){ 
    return doTranslation(dir, string, user, key); 
    } 
} 

我曾嘗試使用NetBeans選擇「新建REST風格的Java客戶端」 ,爲REST源選擇包含web服務的項目。

但它會產生一個方法的類,它沒有參數:

public class NewJerseyClient { 
    private WebTarget webTarget; 
    private Client client; 
    private static final String BASE_URI = "http://localhost:8086/TranslatorREST/Translator"; 

    public NewJerseyClient() { 
    client = javax.ws.rs.client.ClientBuilder.newClient(); 
    webTarget = client.target(BASE_URI); 
    } 

    public String translate() throws ClientErrorException { 
    return webTarget.path("translate").request().post(null, String.class); 
    } 
} 

所以我不明白的方式將參數傳遞到Web服務。

如果我沒有啓用「Post QueryString」選項,那麼我可以成功地使用SoapUI中的這個Web服務,在這種情況下,Web服務對於所有參數都會收到「null」。

在此先感謝。

回答

1

你可以用.queryParam()添加參數:

public class NewJerseyClient { 
    private WebTarget webTarget; 
    private Client client; 
    private static final String BASE_URI = "http://localhost:8086/TranslatorREST/Translator"; 

    public NewJerseyClient() { 
    client = javax.ws.rs.client.ClientBuilder.newClient(); 
    webTarget = client.target(BASE_URI); 
    } 

    public String translate() throws ClientErrorException { 
    return webTarget.path("translate").queryParam("dir", "myDir") 
     .queryParam("string", "myString") 
     .queryParam("user", "myUser") 
     .queryParam("key", "myKey").request().post(null, String.class); 
    } 
}