Как сделать пост с классом данных - PullRequest
1 голос
/ 11 октября 2019

У меня есть эта конечная точка с этой структурой:

uri = http://127.0.0.1:9090/tables/mask

и эта полезная нагрузка:

{
   "_id" : "5d66c9b6d5ccf30bd5b6b541",
   "connectionId" : "1967c072-b5cf-4e9e-1c92-c2b49eb771c4",
   "name" : "Customer",
   "columns" : [
       {
           "name" : "FirstName",
           "mask" : true
       },
       {
           "name" : "LastName",
           "mask" : false
       },
       {
           "name" : "City",
           "mask" : false
       },
       {
           "name" : "Phone",
           "mask" : false
       }
   ],
   "parentId" : null
} 

в моем коде Kotlin У меня есть эта структура для десериализации:

data class ColumnsMaskModel (val name:String, val mask:Boolean )

data class TablesMaskModel (val _id:String, val name:String, val connectionId:String, val columns:MutableList<ColumnsMaskModel?> )

и как я могу использовать TablesMaskModel, чтобы сделать сообщение HTTP в Kotlin

1 Ответ

1 голос
/ 11 октября 2019

Для этого вам понадобится HTTP-клиент. Сами классы данных не имеют ничего общего с HTTP, они просто структуры данных. В Kotlin для JVM доступно множество HTTP-клиентов:

Давайте посмотрим, какчтобы сделать HTTP-запросы в Ktor:

data class ColumnsMaskModel(val name: String, val mask: Boolean)

data class TablesMaskModel(val _id: String, val name: String, val connectionId: String, val columns: MutableList<ColumnsMaskModel?>)

fun main() = runBlocking {
    val client = HttpClient {
        install(JsonFeature) {
            serializer = JacksonSerializer()
        }
    }

    val result = client.post<String> {
        url("http://httpbin.org/post")
        contentType(ContentType.Application.Json)
        body = TablesMaskModel(
            _id = "5d66c9b6d5ccf30bd5b6b541",
            connectionId = "1967c072-b5cf-4e9e-1c92-c2b49eb771c4",
            name = "Customer",
            columns = mutableListOf(
                ColumnsMaskModel(name = "FirstName", mask = true),
                ColumnsMaskModel(name = "LastName", mask = false),
                ColumnsMaskModel(name = "City", mask = false),
                ColumnsMaskModel(name = "Phone", mask = false)
            )
        )
    }

    println(result)

    client.close()
}

Обратите внимание, что Ktor использует функции приостановки для HTTP-запросов, поэтому вам потребуется область сопрограммы, runBlocking в этом примере.

Ktor поддерживаетразличные «бэкэнды» для HTTP-клиентов - Apache, Coroutines IO, curl. Он также имеет различные «функции» для включения сериализации и десериализации полезных нагрузок в полете, как в примере выше.

...