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()).