【问题标题】:Deserialize object with Jackson使用 Jackson 反序列化对象
【发布时间】:2020-08-07 08:19:18
【问题描述】:

我想知道 FasterXML Jackson(或任何其他纯方式)中是否有一个选项可以以这种方式反序列化 JSON,当我从 API 获得 JSON 响应时:

{"id": "1234", "name": "name1"}

然后它会自动映射到类层次结构,如下所示:

class Person (
   val sellerId: SellerId,
   val name: String
)

class SellerId (
   val id: String
)

我感兴趣的主要是如何从顶级“id”进行动态反序列化:字符串到嵌套的“sellerid”,即包含此id的对象。

【问题讨论】:

  • 我有类似的任务,最终实现了自定义反序列化器,该反序列化器使用addDeserializer 在杰克逊模块中注册。我建议让SellerId 实现某种接口IValueBox<T: Any> { val id: T } 并为IValueBox 注册您的自定义解串器。然后,您可以通过反射创建SellerId 和类似值类的实例。
  • 以下回答是否帮助您解决了问题?

标签: java spring kotlin jackson fasterxml


【解决方案1】:

你需要:

  1. 定义一个String-argument 构造函数/工厂方法以从String 值反序列化SellerId 类。
  2. 使用com.fasterxml.jackson.annotation.JsonAliascom.fasterxml.jackson.annotation.JsonProperty 注释来注释sellerId 属性。类似:@JsonProperty("id") val sellerId: SellerId

【讨论】:

    猜你喜欢
    • 2014-02-12
    • 2022-01-22
    • 1970-01-01
    • 2020-07-21
    • 2018-12-26
    • 1970-01-01
    • 2019-10-25
    • 2014-03-11
    • 1970-01-01
    相关资源
    最近更新 更多