Java 使用GET查询访问Web服务的简单方法?

Java 使用GET查询访问Web服务的简单方法?,java,web-services,jakarta-ee,Java,Web Services,Jakarta Ee,我正在尝试创建一个小型Java客户机,它可以通过查询调用GetWebService。想象一下这样的气体/燃料网络服务: http://mywebservice.com/search.xml?lat=50.5&lng=30.33&fuels=Diesel&radius=2 stringbuilder.append("http://mywebservice.com/search.xml?lat=") .append(latField.getText()) .append("

我正在尝试创建一个小型Java客户机,它可以通过查询调用GetWebService。想象一下这样的气体/燃料网络服务:

http://mywebservice.com/search.xml?lat=50.5&lng=30.33&fuels=Diesel&radius=2
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());
理想情况下,我会有一个网站,用户可以输入位置、燃油、公里半径等信息

我可以最好地使用什么技术来简化Web服务调用

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

http://mywebservice.com/search.xml?lat=50.5&lng=30.33&fuels=Diesel&radius=2
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());
你明白了

我在问:有什么比调用webservice查询更聪明的方法吗?你是怎么做到的?如何改进这一点?

一个著名的库是: 它非常简单和灵活

For your usecase you could do something like:
URI uri = new URIBuilder()
        .setScheme("http")
        .setHost("www.google.com")
        .setPath("/search")
        .setParameter("q", "httpclient")
        .setParameter("btnG", "Google Search")
        .setParameter("aq", "f")
        .setParameter("oq", "")
        .build();
HttpGet httpget = new HttpGet(uri);
System.out.println(httpget.getURI());
有关完整示例及更多信息: 著名的图书馆是: 它非常简单和灵活

For your usecase you could do something like:
URI uri = new URIBuilder()
        .setScheme("http")
        .setHost("www.google.com")
        .setPath("/search")
        .setParameter("q", "httpclient")
        .setParameter("btnG", "Google Search")
        .setParameter("aq", "f")
        .setParameter("oq", "")
        .build();
HttpGet httpget = new HttpGet(uri);
System.out.println(httpget.getURI());
有关完整示例及更多信息:

我非常喜欢spring,因此我可以向您推荐rest模板:

举例如下:

Map<String, String> vars = new HashMap<String, String>();
vars.put("hotel", "42");
vars.put("booking", "21");
String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, vars);
Map vars=newhashmap();
vars.put(“酒店”、“42”);
可变存托凭证(“预订”、“21”);
字符串结果=restTemplate.getForObject(“http://example.com/hotels/{hotel}/bookings/{booking}”,String.class,vars);
与您的问题相匹配,这可能是:

Map<String, String> vars = new HashMap<String, String>();
vars.put("lat", latField.getText());
vars.put("lng", lngField.getText());
vars.put("fuels", fuelsField.getText());
vars.put("radius", radiusField.getText());
String result = restTemplate.getForObject("http://mywebservice.com/search.xml?lat={lat}&lng={lng}&fuels={fuels}&radius={radius}", String.class, vars);
Map vars=newhashmap();
vars.put(“lat”,latField.getText());
变量put(“lng”,lngField.getText());
put(“fuels”,fuelsField.getText());
put(“radius”,radiusField.getText());
字符串结果=restTemplate.getForObject(“http://mywebservice.com/search.xml?lat={lat}&lng={lng}&fuels={fuels}&radius={radius}”,String.class,vars);

我非常喜欢spring,因此我可以向您推荐rest模板:

举例如下:

Map<String, String> vars = new HashMap<String, String>();
vars.put("hotel", "42");
vars.put("booking", "21");
String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, vars);
Map vars=newhashmap();
vars.put(“酒店”、“42”);
可变存托凭证(“预订”、“21”);
字符串结果=restTemplate.getForObject(“http://example.com/hotels/{hotel}/bookings/{booking}”,String.class,vars);
与您的问题相匹配,这可能是:

Map<String, String> vars = new HashMap<String, String>();
vars.put("lat", latField.getText());
vars.put("lng", lngField.getText());
vars.put("fuels", fuelsField.getText());
vars.put("radius", radiusField.getText());
String result = restTemplate.getForObject("http://mywebservice.com/search.xml?lat={lat}&lng={lng}&fuels={fuels}&radius={radius}", String.class, vars);
Map vars=newhashmap();
vars.put(“lat”,latField.getText());
变量put(“lng”,lngField.getText());
put(“fuels”,fuelsField.getText());
put(“radius”,radiusField.getText());
字符串结果=restTemplate.getForObject(“http://mywebservice.com/search.xml?lat={lat}&lng={lng}&fuels={fuels}&radius={radius}”,String.class,vars);

您可以使用标准框架编写Web服务客户端,具体取决于Web服务的类型。例如,对于基于SOAP的或基于REST的

您可以使用标准框架编写Web服务客户端,具体取决于Web服务的类型。例如,对于基于SOAP的或基于REST的

您可以使用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));
@Path("/gas")
public class GasService {

@POST
public String post(@FormParam("lat")String lat, @FormParam("lng")String lng) {
    // search based upon lat, lng, etc
}
}
完整的端点定义位于:


您可以使用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));
@Path("/gas")
public class GasService {

@POST
public String post(@FormParam("lat")String lat, @FormParam("lng")String lng) {
    // search based upon lat, lng, etc
}
}
完整的端点定义位于:


最后,我使用了
org.apache.cxf.jaxrs.client.WebClient
,如下所示:

WebClient.create("http://mywebservice.com/search.xml")
    .query("lat", 50.5)
    .query("lng", 30.33)
    .query("fuels", "Diesel")
    .query("radius", 2)
    .get(Search.class);

最后,我使用了
org.apache.cxf.jaxrs.client.WebClient
,如下所示:

WebClient.create("http://mywebservice.com/search.xml")
    .query("lat", 50.5)
    .query("lng", 30.33)
    .query("fuels", "Diesel")
    .query("radius", 2)
    .get(Search.class);