我有一个如下所示的 Json 响应:
[
{ "name":"A" },
{ "name":"B" }
]
我有代表单个 ResponseDto
的 Java 类并包含 Person
的列表:
public class GetPersonsResponseDto {
public List<Person> persons;
}
public class Person {
public String name;
}
我想使用 ObjectMapper
通过 JSON 反序列化但不使用自定义反序列化器并且没有集合类型(没有 Persons[].class
或 TypeReference<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/