我正在尝试为REST web服务编写Java客户端,定义如下:
@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选项"新Restful Java客户端",选择包含web服务的REST源项目。
但是它生成的类只有一个没有参数的方法:
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服务的方法。
我可以从SoapUI成功地使用这个web服务,只要我不启用"Post QueryString"选项,在这种情况下,web服务接收到所有参数的"null"。
您可以使用.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);
}
}