【问题标题】:Kotlin Jackson 序列化问题
【发布时间】:2021-12-31 21:23:04
【问题描述】:

我正在测试 PubSub 消息发送,它有一个名为 PubSubTemplate 的 bean,它允许向 PubSub 发送消息,我想发送原始 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)

我应该如何创建我的有效负载,以便正确编码并能够反序列化为对象?

【问题讨论】:

    标签: json kotlin serialization jackson google-cloud-pubsub


    【解决方案1】:

    ObjectMapper.writeValueAsBytes 将其参数转换为 JSON。由于您的payload 字符串已经 JSON,您可以跳过对objectMapper.writeValueAsBytes 的调用,直接调用ByteString.copyFrom(payload.toByteArray())

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 2021-03-30
      • 2016-12-24
      • 2018-10-06
      • 2016-10-06
      • 2020-09-25
      • 2017-06-25
      相关资源
      最近更新 更多