java - 如何用 Jackson 编写扁平化列表反序列化器?

标签 java spring jackson

我正在尝试使用 Jackson 将特定结构的 JSON 反序列化为 Java 类。 我有几个这样的类:

class A {
  private int number1;
  private List<X> list1;
  private int number2;
}

class X {
  private String field1;
  private double value1;
}


class B {
  private String name2;
  private List<Y> list2;
}

class Y {
  private String field2;
}

我从外部系统获取 JSON,如下所示:

{
  "number1": 1,
  "list1": {
    "elements": [{
      "field1": "Field 1 value 1",
      "value1": 2.2
    }, {
      "field1": "Field 1 value 2"
    }]
  },
  "number2": 2,
}


{
  "name2": "Name 2",
  "list2": {
    "elements": [{
      "field2": "Field 2 value 1"
    }]
  }
}

我想要的只是编写一个自定义反序列化器,它可以以一种通用的方式摆脱这个元素级别(我的意思是对所有类都有一个反序列化器)。 是否有任何简单的方法来扩展 StdDeserializer 来实现这一点,或者我必须使用我的自定义算法编写一个全新的反序列化器?

最佳答案

你可以看看这个问题:Jackson - deserialize inner list of objects to list of one higher level这是非常相似的。我已经在那里实现了自定义反序列化器,它可用于具有内部列表的许多不同类型。您的示例 POJO 可能如下所示:

class A {
    private int number1;

    @JsonDeserialize(using = InnerListDeserializer.class)
    private List<X> list1;
    private int number2;

    // getters, setters
}

编辑
如果您不想使用任何注释或自定义反序列化,则需要创建适合给定 JSONPOJO 结构。您需要创建中间 POJO:

class ListWrapper<T> {

    private List<T> elements;

    // getter, setter, toString, etc
}

现在,您需要以这种方式更新类 AB:

class A {
    private int number1;
    private ListWrapper<X> list1;
    private int number2;

    // getters, setters, toString
}

class B {

    private String name2;
    private ListWrapper<Y> list2;

    // getters, setters, toString
}

关于java - 如何用 Jackson 编写扁平化列表反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54505762/

相关文章:

java - 除非正文为空,否则 Spring @ExceptionHandler 不会返回内容

java - JSON 到 Java 映射参数/通用类型

java - 无法为@override方法抛出异常

java - 框架中声明的按钮在按下时无法正常工作

java - Spring-data-jpa - .save() 什么时候不返回相同的实体?

java - 包含 Map<String, Object> 字段的对象的 Jackson 默认类型

java - com.fasterxml.jackson.databind.exc.MismatchedInputException : Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token

java - 如何修复或处理部署在 Apache Tomcat 7.0.41 中的 Java Struts 1.3 应用程序中的 File Reaper 线程内存泄漏问题?

java - 如何从 MaterialCardView 中移除涟漪效应?

java - 在appengine中使用ajax上传文件时出现问题