java - Jackson ObjectMapper 将值读取到特定的 Java 对象中

标签 java spring serialization jackson yaml

我需要将 yml 文件反序列化为没有默认构造函数的 Java 对象。这会导致 Jackson 的 ObjectMapper 提示并抛出异常。

特别是 Java 类不是我自己的(它是一个依赖项),因此我无法修改它。作者对该类的想法是使用Builder Pattern构造对象,并没有提供默认的构造函数。

为了避免这个问题,我想我需要创建一个适配器类。然后,我将使用序列化的适配器对象并填充构建器来构建我的对象。

有没有更干净的方法来做到这一点?如果只有 ObjectMapper 提供从流读取到特定对象的方法,我可以使用构建器创建一个空对象,然后用 Jackson 填充它......

最佳答案

这只是 @Steve11235 评论的扩展版本。

这不是适配器, 这只是一种解决方法。

  1. 创建一个与JSON格式匹配的类;我将其称为Blammy
  2. Blammy 类中包含一个方法,以填充所需实际类的构建器;我将其称为 Blammy.builderate(DesiredBuilder)
  3. 使用 jackson 将 JSON 反序列化到 Blammy 类中。
  4. 反序列化后,创建所需的 Builder 并将其传递给 Blammy.builderate() 方法。

关于java - Jackson ObjectMapper 将值读取到特定的 Java 对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54024452/

相关文章:

java - 对于旋转 View ,执行(点击())在 espresso ui 测试中不起作用

java - 使用 spring DSL 中的 controlBus 和参数

java - 如何从不同的文件加载基于 spring-boot 的 REST 应用程序属性?

java - 在我使用 Google Play 服务版本 9.0.83 进行的路线跟踪 Activity 中, map 上没有显示标记

java - 延迟行动

c# - 强制 (BinaryFormatter) 序列化器在 ISerializable 时使用 SerializableAttribute 语义?

jquery - 如何在提交之前从表单serialize()获取和替换数据?

c++ - C++ 中的 Python struct.pack/unpack 等价物

java - 从 1.3.x 升级到 1.4.0 后,Spring boot ssl 配置损坏

Java Spring localhost 项目名称转换为 URL