java - 如何反序列化以 Jackson 中的数组开头的 JSON 文件 - 仅使用注释?

标签 java json jackson

我有一个如下所示的 Json 响应:

[
    { "name":"A" },
    { "name":"B" }
]

我有代表单个 ResponseDto 的 Java 类并包含 Person 的列表:

public class GetPersonsResponseDto {
    public List<Person> persons;
}

public class Person {
    public String name;
}

我想使用 ObjectMapper 通过 JSON 反序列化但不使用自定义反序列化器并且没有集合类型(没有 Persons[].classTypeReference<List<Person>>(){} )。我真正想要的是

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(in, GetPersonsResponseDto.class);

但我得到:

jackson.map.JsonMappingException: 
Can not deserialize instance of com.project.my.GetPersonsResponseDto out of START_ARRAY token

我尝试了几种注释但没有成功。

最佳答案

实际上,将模型序列化为目标 json 非常简单,但反序列化可能会很棘手。

因此,在这种情况下反序列化的解决方案可以使用构造函数上方的 com.fasterxml.jackson.annotation 包中的 @JsonCreator 注释:

@Data
public class GetPersonsReponseDto {

    public List<Person> persons;

    @JsonCreator // use this annotation for deserialization on constructor
    public GetPersonsReponseDto(List<Person> persons) {
        this.persons = persons;
    }

    public GetPersonsReponseDto() {
    }
}

但是,它可能不适用于某些版本的 jackson。

关于java - 如何反序列化以 Jackson 中的数组开头的 JSON 文件 - 仅使用注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75338290/

相关文章:

java - 需要有关计算 Java 方法性能的帮助

json - 在golang中用反斜杠解析JSON

java - JSON 数组的 HTML 表单输入等效项是什么?

java - Java中括号内的数字分割

java - 无法编辑 netbeans.conf

java - 如何从两个列表中排除非单个项目?

Java 字符串到对象列表

mysql - MySQL 中的 JSON_REMOVE 对象

java - 如何仅包含要由 Jackson 序列化的对象的某些属性和字段?

json - Spring MVC @RequestBody 和部分对象/json 绑定(bind)