Параметры строки запроса в Java
После пути в URI часто идет строка запроса: пары
"имя=значение", разделенные амперсандом.
Сервер по ним сужает выборку, а клиент просто
добавляет готовый фрагмент к адресу.
На typicode адрес "/posts?userId=1"
возвращает только посты первого пользователя.
Ответ по-прежнему JSON-массив в корне:
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.core.type.TypeReference;
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;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
public record ApiPost(int userId, String title) {}
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/posts?userId=1",
),
)
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
List<ApiPost> posts = mapper.readValue(
response.body(),
new TypeReference<List<ApiPost>>() {},
);
System.out.println(posts.size());
}
}
Несколько параметров перечисляют через "&".
Учебный httpbin.org/get возвращает их
в JSON-поле args, что удобно для проверки
сборки адреса:
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newBuilder().build();
String address =
"https://httpbin.org/get?tag=java&page=2";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(address))
.GET()
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.println(response.body());
}
}
Выполните GET на
"https://jsonplaceholder.typicode.com/posts?userId=1".
Разберите массив в список моделей с полями
userId и title и выведите
размер списка.