Json SpringBoot Rest响应未与jackson反序列化

Json SpringBoot Rest响应未与jackson反序列化,json,rest,spring-boot,jackson,Json,Rest,Spring Boot,Jackson,我是一个运行SpringBoot项目的工程师。在这个项目中,我调用一个外部Rest服务。我已经将响应项建模到bean中。 但是当我得到响应时,数据并没有序列化到bean中。 我想一定有一些配置丢失了,但我找不到什么 我在Maven的配置中添加了configuration spring boot starter测试: rest客户端: @RunWith(SpringRunner.class) @SpringBootTest public class RestClientTest { @A

我是一个运行SpringBoot项目的工程师。在这个项目中,我调用一个外部Rest服务。我已经将响应项建模到bean中。 但是当我得到响应时,数据并没有序列化到bean中。 我想一定有一些配置丢失了,但我找不到什么

我在Maven的配置中添加了configuration spring boot starter测试:

rest客户端:

@RunWith(SpringRunner.class)
@SpringBootTest
public class RestClientTest {

    @Autowired
    private RestTemplateBuilder restTemplate;

    @Test
    public void sayHello() {
        System.out.println("Hello");
        assert(true);
    }

    @Test
    public void testGetEmployee() {
        RestTemplate template = restTemplate.build();;
        HttpHeaders headers = new HttpHeaders();

        List<MediaType> types = new ArrayList<MediaType>();
        types.add(MediaType.APPLICATION_JSON);
        types.add(MediaType.APPLICATION_XML);
        headers.setAccept(types);
        headers.set("Authorization", "Bearer gWRdGO7sUhAXHXBnjlBCtTP");
        HttpEntity<Items> entity = new HttpEntity<Items>(headers);

        String uri = "https://mytest.com/employees";

        //ResponseEntity<String> rec = template.exchange(uri, HttpMethod.GET, entity, String.class);
        //System.out.println("Received: " + rec);


        ResponseEntity<Items> rec = template.exchange(uri, HttpMethod.GET, entity, Items.class);
        System.out.println("Received: " + rec);
    }
}
你看到我在这里缺少什么了吗

谢谢


Gilles

您可能需要将其添加到ObjectMapper中:

mapper.configure(反序列化功能.UNWRAP\u ROOT\u值,true)


并在您的实体上添加
@JsonRootName(“item”)

您实现的方法将尝试将数据反序列化到Items类中。但它没有反序列化所需的属性。当您需要通过rest模板交换获取数据列表时,可以按如下方式获取它们

  • 以数组形式获取数据并将其转换为arrayList

    Item[] itemArray = template.exchange(uri, HttpMethod.GET, entity, Item[].class).getBody();
    
    List<Item> itemList = Arrays,asList(itemArray);
    
    Item[]itemArray=template.exchange(uri,HttpMethod.GET,entity,Item[].class).getBody();
    List itemList=数组,asList(itemArray);
    
  • 使用ParameteredTypeReference以列表形式获取数据

    ResponseEntity<List<Item>> itemList = template.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<Item>>() {});
    
    List<Item> itemList = template.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<Item>>() {}).getBody(); // access list directly
    
    ResponseEntity itemList=template.exchange(uri,HttpMethod.GET,entity,new parametedTypeReference(){});
    List itemList=template.exchange(uri,HttpMethod.GET,entity,new ParameterizedTypeReference(){})。getBody();//直接访问列表
    

  • Items类不是必需的。
    Item[] itemArray = template.exchange(uri, HttpMethod.GET, entity, Item[].class).getBody();
    
    List<Item> itemList = Arrays,asList(itemArray);
    
    ResponseEntity<List<Item>> itemList = template.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<Item>>() {});
    
    List<Item> itemList = template.exchange(uri, HttpMethod.GET, entity, new ParameterizedTypeReference<List<Item>>() {}).getBody(); // access list directly