gpt4 book ai didi

java - 如何使用vertx调用外部API并将数据返回给java对象

转载 作者:行者123 更新时间:2023-11-30 07:45:44 25 4
gpt4 key购买 nike

我正在尝试创建一个调用外部 API 并使用 Java 模型获取数据的 vertx 客户端。

我想做的一个例子是这个,下面只是一个粗略的工作

WebClient client = WebClient.create(vertx);

// Send a GET request
client
.get(8080, "mytour.mycompany.com", "/getRusult?pricemin=0&priceMax=1000&beach=true....etc")
.send(ar -> {
if (ar.succeeded()) {
// Obtain response
HttpResponse<Buffer> response = ar.result();

mytour 是一个外部 API,我想将从调用中获得的数据返回到已经为此设计的我的 java 类。为简洁起见,下面的 java 类并未完整显示,但它遵循构建器模式原则。我想要从 API 调用获得的数据到这个类。

public class Tour {

private Departure departure;
private Arrival arrival;
private TourType tourType;
private Hotel hotel;
private Beach beach;
private Tour() {
}

我不确定如何去做,请提供任何想法。在这一点上,这是我在其他方面所做的,以便从 Buffer 获取旅游对象,知道如何做到这一点吗?

    public Tour clientTest() {
Vertx vertx = Vertx.vertx();

WebClient client = WebClient.create(vertx);

// Send a GET request
client
.get("https://www.mytour.com/tariffsearch/getResult?" +
"priceMin=0&priceMax=1500000&currency=533067&nightsMin=6&nightsMax=8" +
"&hotelClassId=269506&accommodationId=2&rAndBId=15350&tourType=1&" +
"locale=ru&cityId=786&countryId=1104&after=01.08.2018&before=01.08.2018&" +
"hotelInStop=false&specialInStop=false&version=2&tourId=1285&" +
"tourId=12689&tourId=12706&tourId=143330&tourId=9004247&" +
"tourId=4433&tourId=5736&tourId=139343&tourId=4434&tourId=12691&" +
"tourId=21301&tourId=12705&tourId=149827&tourId=4151426&hotelClassBetter=true&" +
"rAndBBetter=true&noTicketsTo=false&noTicketsFrom=false&searchTypeId=3&" +
"recommendedFlag=false&salePrivateFlag=false&onlineConfirmFlag=false&contentCountryId=1102")
.send(ar -> {
if (ar.succeeded()) {
// Obtain response
HttpResponse<Buffer> response = ar.result();
Tour tour = (Tour) response.body();

}
});
}

最佳答案

I want to return the data from the API call to my Tour class

而不是像这样将 response.body() 转换为 Tour 类型:

HttpResponse<Buffer> response = ar.result();
Tour tour = (Tour) response.body();

您应该将body 转换为一个对象(POJO)。您至少可以通过几种方式做到这一点。首先,在此处查看 Vert.x HttpResponse 类的 JavaDoc:https://vertx.io/docs/apidocs/io/vertx/ext/web/client/HttpResponse.html .我们有例如方法如:response.bodyAsString()。一旦我们将响应主体作为 String 并假设此 String 包含 JSON 数据格式的响应,我们就可以转换此 String进入我们的对象,例如使用 Gson库或其他解决方案。

例如:

HttpResponse<Buffer> response = ar.result();
String bodyAsString = response.bodyAsString();

Gson gson = new Gson();
Tour tour = gson.fromJson(bodyAsString, Tour.class);

之后,当 Tour 对象与 JSON HTTP 响应兼容时,您应该将响应数据映射到 Tour 对象中。

我不知道您的 HTTP 响应的结构。如果 Tour 对象与 HTTP 响应不兼容,那么您应该创建另一个对象 - 例如TourResponse,它将与此响应兼容并创建一个映射器,该映射器会将 TourResponse 转换为 Tour 对象。

关于java - 如何使用vertx调用外部API并将数据返回给java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51395414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com