Kotlin Jackson 序列化问题
Kotlin Jackson serialization issue
我正在测试 PubSub 消息发送,它有一个名为 PubSubTemplate 的 bean,它允许向 发送消息PubSub 我想发送 raw JSON,但我注意到其他应用程序使用 PubSub 消息无法反序列化它。问题是当 JacksonPubSubMessageConverter 将有效负载转换为 PubSubMessage 它使用 ByteString.copyFrom(objectMapper.writeValueAsBytes(payload)
) 并且它对我的有效负载进行双重编码,因此当读取发生时实际 json 看起来像这样:\"{ \\"value\\": 42 }\"
fun main() {
val objectMapper = ObjectMapper()
objectMapper.registerModule(KotlinModule())
val payload = "{ \"value\": 42 }"
val payloadEncoded = ByteString.copyFrom(objectMapper.writeValueAsBytes(payload))
val readValue = objectMapper.readerFor(TestClass::class.java).readValue<TestClass>(payloadEncoded.toByteArray())
println(readValue)
}
data class TestClass(var value: Int)
我应该如何创建我的有效载荷,以便它正确编码并能够反序列化为对象?
ObjectMapper.writeValueAsBytes
将其参数转换为 JSON。由于您的 payload
字符串 已经 JSON,您可以跳过对 objectMapper.writeValueAsBytes
的调用,只需调用 ByteString.copyFrom(payload.toByteArray())
.
我正在测试 PubSub 消息发送,它有一个名为 PubSubTemplate 的 bean,它允许向 发送消息PubSub 我想发送 raw JSON,但我注意到其他应用程序使用 PubSub 消息无法反序列化它。问题是当 JacksonPubSubMessageConverter 将有效负载转换为 PubSubMessage 它使用 ByteString.copyFrom(objectMapper.writeValueAsBytes(payload)
) 并且它对我的有效负载进行双重编码,因此当读取发生时实际 json 看起来像这样:\"{ \\"value\\": 42 }\"
fun main() {
val objectMapper = ObjectMapper()
objectMapper.registerModule(KotlinModule())
val payload = "{ \"value\": 42 }"
val payloadEncoded = ByteString.copyFrom(objectMapper.writeValueAsBytes(payload))
val readValue = objectMapper.readerFor(TestClass::class.java).readValue<TestClass>(payloadEncoded.toByteArray())
println(readValue)
}
data class TestClass(var value: Int)
我应该如何创建我的有效载荷,以便它正确编码并能够反序列化为对象?
ObjectMapper.writeValueAsBytes
将其参数转换为 JSON。由于您的 payload
字符串 已经 JSON,您可以跳过对 objectMapper.writeValueAsBytes
的调用,只需调用 ByteString.copyFrom(payload.toByteArray())
.