Ktor:如何序列化/反序列化JSON-API(vnd.API+;JSON)
我希望使用Ktor在Kotlin中重写SpringJavaFX应用程序。我对Spring和Ktor都是新手 我在使用Ktor找出如何实现POJO的序列化和反序列化时遇到了问题。(这些POJO是公共库的一部分) 我试图通过Ktor为请求提供服务的API使用:Ktor:如何序列化/反序列化JSON-API(vnd.API+;JSON),json,rest,kotlin,ktor,Json,Rest,Kotlin,Ktor,我希望使用Ktor在Kotlin中重写SpringJavaFX应用程序。我对Spring和Ktor都是新手 我在使用Ktor找出如何实现POJO的序列化和反序列化时遇到了问题。(这些POJO是公共库的一部分) 我试图通过Ktor为请求提供服务的API使用: 将ORM休眠为ORM映射器 Elide提供RSQL过滤器 例如,“数据/事件”将返回: { "data": [ { "type": "event",
- 将ORM休眠为ORM映射器
- Elide提供RSQL过滤器
{
"data": [
{
"type": "event",
"id": "15b6c19a-6084-4e82-ada9-6c30e282191f",
"attributes": {
"imageUrl": null,
"name": "some text",
"type": "NUMERIC"
}
}, // and more event objects
]
}
查看spring应用程序中的代码库,看起来他们正在使用RestTemplate将上述内容反序列化为一个事件类(只有id、imageUrl、名称和类型作为变量)。Spring似乎自动知道如何从JSON-API获取POJO
我如何对Ktor进行同样的操作?我尝试了最简单的方法:
val response = client.request<List<Event>>("data/event")
但这会导致事件对象列表中没有正确设置变量
我必须创建一个包装类:
data class MyWrapper(val data: List<Event>)
数据类MyWrapper(val数据:列表)
这样,它将使用正确设置的对象
id
填充列表,但不会填充其他属性。因此,默认情况下,Ktor似乎没有为JSON-API配置。我该如何改变这一点呢?我认为JSON:API不受开箱即用的支持。您需要编写自己的序列化程序,或使用其他包装器类:
data class MyWrapper(val data: List<Event>)
classjsonapi(val类型:String,val id:String,val属性:T)
数据类MyWrapper(val数据:列表)
这里的问题是事件
中除id
之外的所有字段都将被填充。因此,您需要调整反序列化结果:
val响应:List=client.request(“数据/事件”).data.filterNotNull().map{it.attributes.copy(id=it.id)}