Джексон десериализует перечисление scala с целочисленным значением

#scala #serialization #jackson

Вопрос:

Я пытаюсь десериализовать перечисление scala из целочисленного значения.

 object TestEnum extends Enumeration {
  type TestEnum = Value
  val None = Value(0)
  val One = Value(1)
  val Two = Value(2)
  val Four = Value(4) // scalastyle:ignore

  @JsonCreator
  def forValue(value: Int): TestEnum = {
    TestEnum.Value(value)
  }
}

class TestEnum extends TypeReference[TestEnum.type]
 

Когда я пытаюсь десериализовать это поле, оно выдает ошибку как — Cannot deserialize value of type com.пример.ТестЕнум$ from Integer value (token JsonToken.ЗНАЧЕНИЕ NUMBER_INT )

Я вижу, что документ Джексона предлагает использовать JsonCreator для того же самого в java, однако ничего не упоминается для перечисления scala.

Я использую defaultScalaMapper без каких-либо настроек здесь.

Ответ №1:

Я смог решить эту проблему с помощью JsonCreator в классе, используя перечисление. следующим образом —

 class Example(testEnum: TestEnum) {
    @JsonCreator
    def this(testEnumNum: Int) = {
        this(TestEnum.forValue(testEnumNum))
    }
}
 

Однако мне нужно делать это в каждом классе, я надеялся, что для этого может быть лучшее решение.