Идентификатор в пути в Java
Шаблон "/posts/{id}" означает, что число
в конце адреса выбирает запись. Строку URI собирают
заранее, подставляя нужный идентификатор в литерал
или через конкатенацию.
Пусть требуется пост с номером 3. После
чтения тела достаточно модели с id и
title:
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 ApiPost(int id, String title) {}
public class Main {
public static void main(String[] args) throws Exception {
int postId = 3;
ObjectMapper mapper = new ObjectMapper();
HttpClient client = HttpClient.newBuilder().build();
String address =
"https://jsonplaceholder.typicode.com/posts/" + postId;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(address))
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
ApiPost post = mapper.readValue(
response.body(),
ApiPost.class,
);
System.out.println(post.id());
System.out.println(post.title());
}
}
Тот же прием работает для пользователей: меняется
только базовый сегмент и тип модели. Число
2 в пути дает вторую учебную запись:
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 {
int userId = 2;
ObjectMapper mapper = new ObjectMapper();
HttpClient client = HttpClient.newBuilder().build();
String address =
"https://jsonplaceholder.typicode.com/users/" + userId;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(address))
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
ApiUser user = mapper.readValue(
response.body(),
ApiUser.class,
);
System.out.println(user.name());
}
}