如何用数据class制作post
How to make post with data class
我有这个结构的端点:
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 post
您需要一个 HTTP 客户端来执行此操作。 Data 类 本身与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 支持各种 "backends" HTTP 客户端 – Apache、Coroutines IO、curl。它还具有不同的 "features" 以启用飞行中的有效载荷序列化和反序列化,如上例所示。
我有这个结构的端点:
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 post
您需要一个 HTTP 客户端来执行此操作。 Data 类 本身与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 支持各种 "backends" HTTP 客户端 – Apache、Coroutines IO、curl。它还具有不同的 "features" 以启用飞行中的有效载荷序列化和反序列化,如上例所示。