Учитывая этот класс данных:
data class MyPojo(val notInJson: Int, val inJson: Int)
Предположим, что я хочу реализовать функцию формы:
fun deserialize(jsonString: String, valueForFieldNotInJson: Int): MyPojo
Где jsonString
не включает поле с именем notInJson
. Предположим также, что я не контролирую определение класса MyPojo
.
Как я мог использовать библиотеку Джексона для десериализации MyPojo
из jsonString
и увеличения отсутствующего поля ( notInJson
) из параметра valueForFieldNotInJson
?
Это может быть достигнуто путем объединения 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) }