我正在尝试创建一个小型Java客户端,该客户端可以通过查询调用GET Web服务。想象一下这样的天然气/燃料网络服务:

http://mywebservice.com/search.xml?lat=50.5&lng=30.33&fuels=Diesel&radius=2


理想情况下,我将拥有一个网站,用户可以在其中输入诸如位置,燃料,以公里为单位的半径等信息。

我能最好地使用哪种技术来简化Web服务的调用?

目前,我正在手动构建查询,如下所示:

stringbuilder.append("http://mywebservice.com/search.xml?lat=")
.append(latField.getText())
.append("&lng=")
.append(lngField.getText())
.append("&fuels=")
.append(fuelsField.getText())
.append("&radius=")
.append(radiusField.getText());


你明白了。

我在问:有什么更聪明的方法来调用网络服务查询?你好吗如何改善呢?

最佳答案

您可以使用JAX-RS轻松构建/部署/调用此REST端点。

客户端可能看起来像:

Client client = ClientBuilder.newClient();
WebTarget target = client.target(".../gas");
MultivaluedHashMap<String, String> map = new MultivaluedHashMap<>();
map.add("lat", "50.5");
map.add("lng", "30.33");
map.add("fuels", "Diesel");
map.add("radius", "2");
target.request().post(Entity.form(map));


类似的客户端代码位于:

https://github.com/arun-gupta/javaee7-samples/blob/master/jaxrs/jaxrs-client/src/main/java/org/javaee7/jaxrs/client/TestJAXRS2Client.java

端点可能看起来像:

@Path("/gas")
public class GasService {

@POST
public String post(@FormParam("lat")String lat, @FormParam("lng")String lng) {
    // search based upon lat, lng, etc
}
}


完整的端点定义位于:

https://github.com/arun-gupta/javaee7-samples/blob/master/jaxrs/jaxrs-client/src/main/java/org/javaee7/jaxrs/client/MyResource.java

10-07 16:21