Джексон сериализует объект как ключ карты - PullRequest
0 голосов
/ 31 октября 2018

Привет, я столкнулся с проблемой при сериализации карты, где ключ - это пользовательский класс.

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 сериализуется правильно, а ключ - нет.

1 Ответ

0 голосов
/ 31 октября 2018

Я предполагаю, что ожидаемый результат:

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

Но это не верно, Джсон. Вы все еще можете сделать что-то вроде:

{
  "key" : {
      "id": 1,
      "name":"Thomas"
  },
  "value" : [...]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...