Intereting Posts
Как слить два набора перечислений в kotlin с одним и тем же родительским интерфейсом? Тестирование приложения Android Kotlin – Mockito с кинжалом вводит нуль Создайте общий наблюдаемый, который избегает множественного вызова Работа для администратора устройства api не имеет собственного профиля Аннотации времени выполнения, аннотированные по поданной в классе kotlin, генерируются неправильно «несоответствие типа приемника» с фрагментом и тостом Anko Почему строка интерполяции Kotlin объединяет строки в Java? Гессон Deserialization с Kotlin, блок инициализатора не называется Изменение списка фрагментов изменяется в других фрагментах Каково ключевое слово typeof Firestore позволяет загружать только один документ Выражение лямбда не используется Android-устройство logcat продолжает работать Как найти вид в headerLayout android kotlin Как я могу сфотографировать свой sdk, закодированный с kotlin (и избавиться от метаданных)

Джексон-десериализация – классы данных Kotlin – значения по умолчанию для отсутствующих полей на картографе

Учитывая этот класс данных:

data class MyPojo(val notInJson: Int, val inJson: Int) 

Предположим, что я хочу реализовать функцию формы:

 fun deserialize(jsonString: String, valueForFieldNotInJson: Int): MyPojo 

Где jsonString не включает поле с именем notInJson . Предположим также, что я не контролирую определение класса MyPojo .

Как я мог использовать библиотеку Джексона для десериализации MyPojo из jsonString и увеличения отсутствующего поля ( notInJson ) из параметра valueForFieldNotInJson ?

Заметки:

  • В основном, речь идет о десериализации класса Immutable, где некоторые поля поступают от Json, а другие – во время выполнения.
  • Использование пользовательских десериализаторов или сборщиков не будет работать, поскольку отсутствующие значения неизвестны во время компиляции.

Solutions Collecting From Web of "Джексон-десериализация – классы данных Kotlin – значения по умолчанию для отсутствующих полей на картографе"

Это может быть достигнуто путем объединения MinInAnnotations и ValueInjection .

Полное решение:

 data class MyPojo(val notInJson: Int, val inJson: Int) class MyPojoMixIn { @JacksonInject("notInJson") val notInJson: Int = 0 } fun deserialize(jsonString: String, valueForFieldNotInJson: Int): MyPojo { val injectables = InjectableValues.Std().addValue("notInJson", valueForFieldNotInJson) val reader = jacksonObjectMapper() .addMixIn(MyPojo::class.java, MyPojoMixIn::class.java) .readerFor(MyPojo::class.java) .with(injectables) return reader.readValue(jsonString) }