Один ресурс API в Java
Многие API адресуют объект по идентификатору в конце
пути. Ответ - один JSON-объект, его разбирают так же,
как локальную строку, только источником служит
body() у ответа клиента.
Чтение "/users/1" на typicode возвращает
пользователя с полем name. Модель снова
может быть короткой, лишние ключи отбрасывают
аннотацией на record:
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 ApiUser(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(),
);
ApiUser user = mapper.readValue(
response.body(),
ApiUser.class,
);
System.out.println(user.name());
}
}
Тот же путь с другим числом в конце дает другую
запись. Достаточно поменять сегмент адреса и снова
прочитать 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 ApiUser(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/2",
),
)
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
ApiUser user = mapper.readValue(
response.body(),
ApiUser.class,
);
System.out.println(user.id());
System.out.println(user.name());
}
}