Выполнение HTTP-запросов к другим службам
В этом документе показано, как выполнять HTTP-запросы к другим службам.
Что вы будете создавать
Вы создадите приложение Vert.x, которое будет использовать API по адресу https://icanhazdadjoke.com/api и отображать новый анекдот каждые 3 секунды:
Приложение помещается в один JokeVerticle класс.
Что вам потребуется
-
Текстовый редактор или IDE
-
Java 11 или выше
-
Maven или Gradle
Создание проекта
Код этого проекта содержит файлы сборки Maven и Gradle, которые функционально эквивалентны.
Использование Maven
Вот содержимое файла pom.xml, который вы должны использовать:
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.vertx.howtos</groupId>
<artifactId>http-client-howto</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<vertx.version>5.0.0.CR2</vertx.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-stack-depchain</artifactId>
<version>${vertx.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web-client</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.5.0</version>
<configuration>
<mainClass>io.vertx.howtos.httpclient.JokeVerticle</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project> Использование Gradle
Предполагая, что вы используете Gradle с Kotlin DSL, вот как должен выглядеть ваш файл build.gradle.kts:
build.gradle.kts
plugins {
java
application
}
repositories {
mavenCentral()
}
dependencies {
val vertxVersion = "5.0.0.CR2"
implementation("io.vertx:vertx-core:${vertxVersion}")
implementation("io.vertx:vertx-web-client:${vertxVersion}")
}
application {
mainClass = "io.vertx.howtos.httpclient.JokeVerticle"
} Получение анекдотов с помощью Vert.x web client
Vert.x web client значительно упрощает выполнение HTTP-запросов по сравнению с более низкоуровневым API, найденным в ядре Vert.x. Он делает WebClient класс можно найти в артефакте io.vertx:vertx-web-client.
Чтобы получить новые анекдоты, нам необходимо выполнить HTTP-GET-запросы к https://icanhazdadjoke.com/api. Для этого каждые 3 секунды мы просто будем использовать периодический таймер Vert.x.
API возвращает простые JSON-объекты. Мы можем протестировать его с помощью инструмента командной строки, такого как curl:
$ curl -H "Accept: application/json" https://icanhazdadjoke.com/
{"id":"IJBAsrrzPmb","joke":"What do you call a cow with two legs? Lean beef.","status":200} Вот код класса JokeVerticle:
package io.vertx.howtos.httpclient;
import io.vertx.core.AbstractVerticle;
import io.vertx.core.Vertx;
import io.vertx.core.http.HttpResponseExpectation;
import io.vertx.core.json.JsonObject;
import io.vertx.ext.web.client.HttpRequest;
import io.vertx.ext.web.client.WebClient;
import io.vertx.ext.web.codec.BodyCodec;
public class JokeVerticle extends AbstractVerticle {
private HttpRequest<JsonObject> request;
@Override
public void start() {
request = WebClient.create(vertx) (1)
.get(443, "icanhazdadjoke.com", "/") (2)
.ssl(true) (3)
.putHeader("Accept", "application/json") (4)
.as(BodyCodec.jsonObject()); (5)
vertx.setPeriodic(3000, id -> fetchJoke());
}
private void fetchJoke() {
request.send()
.expecting(HttpResponseExpectation.SC_OK) (6)
.onSuccess(result -> {
System.out.println(result.body().getString("joke")); (7)
System.out.println("🤣");
System.out.println();
})
.onFailure(e -> System.out.println("No joke fetched: " + e.getMessage()));
}
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new JokeVerticle()).await();
}
} | 1 | Получить экземпляр WebClient, прикрепленный к текущему экземпляру Vert.x. |
| 2 | HTTP-запрос GET для пути / к хосту icanhazdadjoke.com на порту 443 (HTTPS). |
| 3 | Не забудьте включить шифрование SSL. |
| 4 | Явно укажите, что мы хотим JSON-данные. |
| 5 | Ответ автоматически преобразуется в JSON. |
| 6 | Ожидается HTTP-статус-код 200, в противном случае запрос завершится ошибкой. |
| 7 | Тело — JSON-объект, и мы записываем результат в консоль. |
Запуск приложения
В JokeVerticle уже есть метод main, поэтому его можно использовать как есть для:
-
создания контекста
Vertx, а затем -
развертывания
JokeVerticle.
Вы можете запустить приложение из:
-
вашей IDE, запустив метод
mainиз классаJokeVerticle, или -
с помощью Maven:
mvn compile exec:java, или -
с помощью Gradle:
./gradlew run(Linux, macOS) илиgradle run(Windows).
Заключение
В этом документе рассматривались:
-
Vert.x web client для выполнения HTTP-запросов,
-
извлечение данных из JSON-ответа,
-
периодические задачи Vert.x.
© 2025 Eclipse Vert.x™Eclipse Vert.x™ is open source and dual-licensed under the Eclipse Public License 2.0 and the Apache License 2.0.Website design by Michel Krämer.
https://vertx.io/docs/howtos/http-client-howto/