Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpApInr 241 of 322 menu
◀ ▶

Введение в запросы к API в Java

Веб-API часто отвечает не HTML, а текстом JSON. Клиент JDK получает его как обычную строку в теле ответа, после чего ту же строку передают методу readValue у ObjectMapper.

Публичный каталог jsonplaceholder.typicode.com отдает записи пользователей. Достаточно одного чтения по адресу "/users/1", затем разбор только нужных полей:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.ObjectMapper; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @JsonIgnoreProperties(ignoreUnknown = true) public record UserPreview(int id, String name) {} public class Main { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); HttpClient client = HttpClient.newBuilder().build(); HttpRequest request = HttpRequest.newBuilder() .uri( URI.create( "https://jsonplaceholder.typicode.com/users/1", ), ) .GET() .build(); HttpResponse<String> response = client.send( request, HttpResponse.BodyHandlers.ofString(), ); String raw = response.body(); UserPreview user = mapper.readValue(raw, UserPreview.class); System.out.println(user.id()); System.out.println(user.name()); } }

В тексте от сервера есть и другие ключи: почта, адрес, компания. Аннотация @JsonIgnoreProperties(ignoreUnknown = true) на record пропускает лишние поля, если в модели описаны только id и name.

Тот же прием работает, если в модели оставить идентификатор и почту вместо имени. Лишние ключи по-прежнему не мешают:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.databind.ObjectMapper; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; @JsonIgnoreProperties(ignoreUnknown = true) public record UserMail(int id, String email) {} public class Main { public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper(); HttpClient client = HttpClient.newBuilder().build(); HttpRequest request = HttpRequest.newBuilder() .uri( URI.create( "https://jsonplaceholder.typicode.com/users/1", ), ) .GET() .build(); HttpResponse<String> response = client.send( request, HttpResponse.BodyHandlers.ofString(), ); UserMail user = mapper.readValue( response.body(), UserMail.class, ); System.out.println(user.email()); } }
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить