Jackson ObjectMapper将值读入特定的Java对象

时间:2019-01-03 14:40:13

标签: java spring serialization jackson yaml

我需要将yml文件反序列化为没有默认构造函数的Java对象。这将导致Jackson的ObjectMapper抱怨并引发异常。

特别是Java类不是我自己的这是一个依赖项),因此我无法对其进行修改。作者对于该类的想法是使用“构建器模式”构造对象,但未提供默认构造函数。

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

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

2 个答案:

答案 0 :(得分:1)

这只是@ Steve11235注释的扩展版本。

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

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

答案 1 :(得分:0)

好的,所以我最终要做的是将YAML文件加载到Jackson的ObjectMapper中。然后,我遍历了表示YAML文件整个结构的JsonNode对象,然后将这些参数一般传递给builder类。