【发布时间】:2021-01-22 14:04:16
【问题描述】:
我希望使用 Ktor 在 Kotlin 中重写 Spring javafx 应用程序。我是 Spring 和 Ktor 的新手。
我无法使用 Ktor 弄清楚如何处理 POJO 的序列化和反序列化。 (这些 POJO 是公共库的一部分)。
我尝试通过 Ktor 向其提供请求的 API 使用:
- 将 ORM 休眠为 ORM 映射器
- 使用 RSQL 过滤器省略以服务 JSON-API conform data
例如“数据/事件”将返回:
{
"data": [
{
"type": "event",
"id": "15b6c19a-6084-4e82-ada9-6c30e282191f",
"attributes": {
"imageUrl": null,
"name": "some text",
"type": "NUMERIC"
}
}, // and more event objects
]
}
查看 spring 应用程序中的代码库,看起来他们正在使用 RestTemplate 将上述内容反序列化为 Event 类(它只有一个 id、imageUrl、name 和 type 作为变量)。 Spring 似乎自动知道如何从 JSON-API 获取 POJO。
我怎样才能对 Ktor 做同样的事情?我尝试了最简单的:
val response = client.request<List<Event>>("data/event")
使用序列化器作为 gson:
install(JsonFeature) {
serializer = GsonSerializer()
}
但这会导致一个 Event 对象列表,其中没有正确设置它们的变量。
我必须做一个包装类:
data class MyWrapper(val data: List<Event>)
然后它将使用正确设置的对象id 填充列表,但没有其他属性。所以默认情况下,看起来 Ktor 没有为 JSON-API 配置。我该如何更改?
【问题讨论】: