Отправка JSON в Java
Создание записи на API часто требует метода POST и
тела в формате JSON. Текст тела получают из модели
через writeValueAsString, а в запросе задают
заголовок "Content-Type: application/json".
Учебный "/posts" на typicode принимает
черновик с userId, title и
body. Ответ можно разобрать в тип с полем
id:
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;
public record NewPost(int userId, String title, String body) {}
@JsonIgnoreProperties(ignoreUnknown = true)
public record SavedPost(int id, String title) {}
public class Main {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
NewPost draft = new NewPost(
1,
"Note",
"Short text",
);
String payload = mapper.writeValueAsString(draft);
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest.newBuilder()
.uri(
URI.create(
"https://jsonplaceholder.typicode.com/posts",
),
)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
SavedPost saved = mapper.readValue(
response.body(),
SavedPost.class,
);
System.out.println(saved.id());
System.out.println(saved.title());
}
}
Сервис httpbin.org/post возвращает принятое
тело внутри JSON-ответа. Массив чисел кодируют так
же, как одиночный объект, и отправляют одной строкой:
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;
public class Main {
public static void main(String[] args) throws Exception {
List<Integer> numbers = List.of(1, 2, 3, 4, 5);
ObjectMapper mapper = new ObjectMapper();
String payload = mapper.writeValueAsString(numbers);
HttpClient client = HttpClient.newBuilder().build();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://httpbin.org/post"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString(),
);
System.out.println(response.body());
}
}
Сформируйте JSON-массив чисел от 1 до
5, отправьте его POST на
"https://httpbin.org/post" с типом
"application/json". Выведите тело
ответа целиком или фрагмент с принятыми
данными.