Intereting Posts
Разница между методами OnclickListener в Котлине Kotlin enum реализует интерфейс Java с объявлением String name () Не удалось запустить приложение Kotlin в Eclipse Задача Kapt gradle Exception: исключение класса cast Как разбирать JSON с URL-адреса, используя Kotlin на Android? единичный тест с штормом апачей и кассандра: локальная топология, не потребляющая сообщение от кафки Фильтр списка в пределах диапазона – KOTLIN Астероиды Игра AI – Усиление обучения Входы Статические методы расширения в Котлине Что такое файлы .kotlin_builtins и могу ли я их опустить из моих uberjars? используя Gson в kotlin для анализа json-массива Прикрепление, чтобы заменить вектор, который можно вырезать с помощью изображения с камеры, и растягиваемый растягивается за изображение? RxJava2 наблюдаемый не обрабатывается вNext при изменении BottomNavigationView ссылку на ViewPager, когда я установил Listener в bottomNavigationView, мне нужно дважды щелкнуть, чтобы выполнить то, что я делаю Несовместимые типы: A и kotlin.reflect.KType

Джексон-десериализация – классы данных 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, а другие – во время выполнения.
  • Использование пользовательских десериализаторов или сборщиков не будет работать, поскольку отсутствующие значения неизвестны во время компиляции.

Это может быть достигнуто путем объединения 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) }