kotlin - 如何用数据类发表文章

标签 kotlin request http-post

我有这个结构的端点:

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发布

最佳答案

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

  • java.net.HttpURLConnection
  • Java 9的HttpClient
  • Apache HttpComponents
  • OkHttp
  • Ktor

  • 让我们看看如何在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。它也具有不同的“功能”以实现对运行中的有效载荷进行序列化和反序列化,如上面的示例所示。

    关于kotlin - 如何用数据类发表文章,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58332300/

    相关文章:

    Kotlin:我可以将函数分配给 main 中伴随对象中的变量吗?

    android - 如何通过 kotlin 中的 Intent 传递自定义对象

    android - 如何以编程方式更改 NavigationView 的菜单?

    javascript - 通过 AngularJS 发送带有多个数据的 HTTP Post

    ruby-on-rails - Ruby on Rails 接受发布请求

    java - registerDefaultNetworkCallback 和 registerNetworkCallback 的区别

    javascript - 如何从 Angular $http post 请求中获取 json 字符串

    tomcat - 使用tomcat将请求和 header 转发到不同的主机

    Facebook 批量请求

    javascript - Google Analytics 可以跟踪表单 POST 操作的结果吗?