程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数据类中的默认参数未使用 ktor 序列化程序转换为 json大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决数据类中的默认参数未使用 ktor 序列化程序转换为 json?

开发过程中遇到数据类中的默认参数未使用 ktor 序列化程序转换为 json的问题如何解决?下面主要结合日常开发的经验,给出你关于数据类中的默认参数未使用 ktor 序列化程序转换为 json的解决方法建议,希望对你解决数据类中的默认参数未使用 ktor 序列化程序转换为 json有所启发或帮助;

在 http 请求中将数据类序列化为 Json 时,我遇到了一个奇怪的问题。

工作代码:

@Serializable
data class ComanyCustomerLoginData(
  val email: String,val credential: String,val companyUUID: String,)
val customerLoginData = ComanyCustomerLoginData("trwla@gmail.com","1234","d80f0b72-a062-11eb-bcbc-0242ac130002")
val response = clIEnt.post<httpResponse>(URL) {
   ContentType(ContentType.Application.Json)
   body = customerLoginData
}

非工作代码

@Serializable
data class ComanyCustomerLoginData(
  val email: String,val companyUUID: String = "d80f0b72-a062-11eb-bcbc-0242ac130002","1234")
val response = clIEnt.post<httpResponse>(URL) {
   ContentType(ContentType.Application.Json)
   body = customerLoginData
}

在非工作代码中,在数据类构造函数中有一个默认参数,但是当它被序列化时,我在该 Json 中看不到 companyUUID,但工作代码创建了一个名为 companyUUID 的键。

你能指出是什么问题吗?

解决方法

kotlinx-serialization 中的默认值 are not encoded:

This place in the docs 描述了如何自定义此行为:

val format = Json { encodeDefaults = true }

在Ktor中使用这个的具体情况,可以这样自定义:

install(JsonFeature) {
    serializer = KotlinxSerializer(kotlinx.serialization.json.Json {
        encodeDefaults = true
    })
}

如果通信双方使用相同的数据模型,那么您就不需要这个。它们都将正确使用默认值,并通过不显式写入来节省带宽。

,

您需要encodeDefaults = true 有关详细信息,请参阅 this issue

大佬总结

以上是大佬教程为你收集整理的数据类中的默认参数未使用 ktor 序列化程序转换为 json全部内容,希望文章能够帮你解决数据类中的默认参数未使用 ktor 序列化程序转换为 json所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:json