【问题标题】:How to make post with data class如何使用数据类发帖
【发布时间】:2019-10-10 23:20:23
【问题描述】:

我有这个结构的端点:

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 在 Kotlin 中发布 HTTP 帖子

【问题讨论】:

    标签: kotlin request http-post


    【解决方案1】:

    您需要一个 HTTP 客户端来执行此操作。数据类本身与 HTTP 无关,它们只是数据结构。 Kotlin 上有很多用于 JVM 的 HTTP 客户端:

    让我们看看如何在 Ktor 中发出 HTTP 请求:

    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。它还具有不同的“功能”来启用动态有效负载序列化和反序列化,就像上面的示例一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多