首页 > 解决方案 > 反序列化属性值为数组java的json数组

问题描述

我知道这是非常基本的,但是当格式如下时,我在使用杰克逊反序列化 json 时遇到问题:

我创建了一个带有 id、name 和 place 的类 Person,并尝试使用 jackson(使用 @JsonProperty 注释)从 API 调用中读取结果,但是当我调试 people 变量时为 null:

 json body:
  { people:[  
   {  
    "id":"0",
    "name":"Bob",
    "place":"Colorado",
   },
   {  
    "id":"1",
    "name":"John",
    "place":"Chicago",
   },
   {  
    "id":"2",
    "name":"Marry",
    "place":"Miami",
   }
 ]}


 RequestEntity<Void> reqEntity = RequestEntity.get(new URI(url))
                .accept(MediaType.APPLICATION_JSON)
                .build();

 ResponseEntity<List<Person>> persons = template.exchange(reqEntity, new ParameterizedTypeReference<List<Person>>() {});

标签: javaarraysjsonjacksondeserialization

解决方案


您应该将您包装List<Person>在另一个 Response 对象中,该对象具有一个people包含您的列表的字段:

public class PeopleResponse {
    private List<Person> people;

    // getter and setter
}

然后你可以ResponseEntity根据这个改变你的:

ResponseEntity<PeopleResponse> response = template.exchange(reqEntity, new ParameterizedTypeReference<PeopleResponse>() {});
List<Person> people = response.getBody().getPeople();

推荐阅读