Jackson反序列化-Kotlin数据类-每个映射器缺少字段的默认值

gcscaglia

给定此数据类:

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

假设我要实现以下形式的功能:

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

其中jsonString不包含名为的字段notInJson还要假设,我无法控制MyPojo类的定义。

我怎么能使用杰克逊库反序列化MyPojojsonString和增强缺少的领域(notInJson从)valueForFieldNotInJson参数?

笔记:

  • 基本上,问题在于反序列化Immutable类,其中某些字段来自Json,而其他字段则在运行时提供。
  • 使用自定义反序列化器或生成将不起作用,因为缺少值在编译时是未知的。
gcscaglia

这可以通过结合MinInAnnotationsValueInjection来实现

完整的解决方案如下:

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)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用Jackson的objectMapper反序列化接口字段?

Jackson映射器跳过类名称(反序列化问题)

由于InvalidDefinitionException,Javamoney的CurrencyUnit不能用作字段的类并由Jackson进行反序列化

Jackson-@JsonValue注释的字段不能反序列化

用Jackson对多态类反序列化JSON

Jackson JsonDeserializer委托将字段反序列化为该字段类型的默认反序列化器

Jackson仅接口字段反序列化

用Jackson反序列化派生类

使用Jackson JSON映射器序列化/反序列化Java 8 java.time

用匿名类对Jackson进行反序列化

Jackson XML反序列化,多态映射

为什么Kotlin Jackson不能反序列化列表

Jackson定制反序列化器打破了其他领域的反序列化

如何序列化/反序列化IList集合的类包装器?

具有多个类的XML序列化器/反序列化

Kotlin字段覆盖和GSON反序列化无法创建转换器类异常

Kotlin数据类是否默认可序列化?

反序列化STL映射类成员

从包装器类中的类型反序列化Jackson中的动态实体

Jackson:通过数据绑定对单值数组内的通用对象进行序列化/反序列化

在Kotlin中,数据类的Jackson反序列化错误

Jackson 无法反序列化 Kotlin 数据类

使用 Jackson 从 JSON 反序列化 Scala 地图字段

在 jackson 中反序列化可选的可为空字段

带有 ParameterNamesModule 的 Jackson 无法反序列化类

反序列化 Scala 案例类时,如何跳过 Jackson 中的包装器 JSON 对象?

Quarkus Jackson InvalidDefinitionException 找不到类型 [简单类型,类 java.math.BigDecimal] 的 (Map) Key 反序列化器

JOOQ 类中的布尔字段未由 Jackson/RestEasy 一致地序列化和反序列化

使用生成的字段值反序列化类