【问题标题】:Jackson serialize object as key of map杰克逊将对象序列化为地图的键
【发布时间】:2019-04-04 09:45:12
【问题描述】:

您好,我遇到了 key 是自定义类的 map 序列化问题。

data class KeyClass(val id: Int, val name: String) {
    fun toJSON() = "\"KeyClass\": {\"id\":$id,\"name\":\"$name\"}"
}

调用:

 fun method(): Map<KeyClass, List<Something>> = ...

我的 jackson Serializer ofc 我还将它作为模块添加到 objectMapper 中:

class KeyClassSerializer : JsonSerializer<KeyClass>() {
    override fun serialize(value: KeyClass, gen: JsonGenerator, serializers: SerializerProvider) {
        gen.writeRawValue(value.toJSON())
    }

}

class KeyClassSerializerModule : SimpleModule() {
    init {
        addKeySerializer(KeyClass::class.java, KeyClassSerializer())
    }
}

我收到的 JSON 是:

"\"KeyClass\": {\"id\":1,\"name\":\"Thomas\"}" : [Something:...]

我的意思是 map 的值被正确序列化,但 key 不是。

【问题讨论】:

  • 你期望的结果是什么?

标签: json spring spring-boot kotlin jackson


【解决方案1】:

我假设预期的结果是:

"KeyClass": {
  "id": 1,
  "name":"Thomas"
} : [...]

但它不是有效的 Json。您仍然可以执行以下操作:

{
  "key" : {
      "id": 1,
      "name":"Thomas"
  },
  "value" : [...]
}

【讨论】:

  • 但是为此我需要为 Map> 编写序列化
  • 不,创建一个数据类KV(key:KeyClass,value:List),不需要自定义序列化器。
猜你喜欢
  • 1970-01-01
  • 2012-01-11
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-14
  • 2014-10-10
相关资源
最近更新 更多