杰克逊将对象序列化为地图的关键

时间:2018-10-31 09:06:04

标签: json spring spring-boot kotlin jackson

您好,我面临着地图序列化的问题,其中键是自定义类。

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

调用:

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

我的杰克逊序列化器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却没有。

1 个答案:

答案 0 :(得分:0)

我认为预期结果是:

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

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

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