#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))
}
}
Однако мне нужно делать это в каждом классе, я надеялся, что для этого может быть лучшее решение.