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

Отправка JSON в Kotlin

Создание записи на API часто требует метода POST и тела в формате JSON. Текст тела получают из модели через кодек, а в запросе задают заголовок "Content-Type: application/json".

Учебный "/posts" на typicode принимает черновик с userId, title и body. Ответ можно прочитать как строку или разобрать в тип с полем id:

import java.net.URI import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json @Serializable data class NewPost( val userId: Int, val title: String, val body: String, ) @Serializable data class SavedPost(val id: Int, val title: String) fun main() { val json = Json { ignoreUnknownKeys = true } val draft = NewPost( userId = 1, title = "Note", body = "Short text", ) val payload = json.encodeToString(draft) val client = HttpClient.newBuilder().build() val request = HttpRequest.newBuilder() .uri( URI.create( "https://jsonplaceholder.typicode.com/posts", ), ) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(payload)) .build() val response = client.send( request, HttpResponse.BodyHandlers.ofString(), ) val saved = json.decodeFromString<SavedPost>( response.body(), ) println(saved.id) println(saved.title) }

Сервис httpbin.org/post возвращает принятое тело внутри JSON-ответа. Массив чисел кодируют так же, как одиночный объект, и отправляют одной строкой:

import java.net.URI import java.net.http.HttpClient import java.net.http.HttpRequest import java.net.http.HttpResponse import kotlinx.serialization.json.Json fun main() { val numbers = (1..5).toList() val payload = Json.encodeToString(numbers) val client = HttpClient.newBuilder().build() val request = HttpRequest.newBuilder() .uri(URI.create("https://httpbin.org/post")) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString(payload)) .build() val response = client.send( request, HttpResponse.BodyHandlers.ofString(), ) println(response.body()) }

Сформируйте JSON-массив чисел от 1 до 5, отправьте его POST на "https://httpbin.org/post" с типом "application/json". Выведите тело ответа целиком или фрагмент с принятыми данными.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить