Spring Rest Template没有返回数据

时间:2017-11-26 19:44:11

标签: java spring junit resttemplate

我正在尝试为我的spring应用程序编写集成测试,我有一个插入一些默认数据的api,我在测试初始化​​后运行调用此api

@PostConstruct
public void inti() {
    ResponseEntity<String> response = restTemplate.getForEntity("/api/default", String.class);
    assertEquals("Default values are not inserted successfully", "lala", response.getBody());
}

这传递了,我可以在数据库中看到默认值。

在我的测试中,我尝试获取一些数据,但返回的数据为0,尽管我手动测试了api并且其工作

@Test
public void shouldReturnDeliveryNotes() {
    ResponseEntity<PagedResources<DeliveryNote>> allDeliveryNotes = restTemplate.exchange("/api/deliverynotes/all?start=0&length=1000",HttpMethod.GET,null,  new ParameterizedTypeReference<PagedResources<DeliveryNote>>() {});
    assertNotEquals("Should have default delivery notes", 0, allDeliveryNotes.getBody().getContent().size());   
}

我在api中放了一些日志来查看返回的数据大小,我看到测试运行时返回的数据是正确的,这意味着我的测试正在点击正确的api并且api获取数据。

@GetMapping("/all")
public ResponseEntity<Page<DeliveryNoteDTO>> getAllDeliveryNote(@RequestParam(value = "start", required = false) int start, @RequestParam(value ="length", required = false) int length) {
    Pageable pageable = new OffsetBasedPageRequest(start, (length ==0? Integer.MAX_VALUE: length));
    List<DeliveryNote> page = this.deliveryNoteService.getAllDeliverNotes();
    List<DeliveryNoteDTO> dtoList =page.stream().map(post -> convertToDto(post)).collect(Collectors.toList());
    Page<DeliveryNoteDTO> pageDto = new PageImpl<>(dtoList, pageable, dtoList.size());
    System.out.println("size = "+pageDto.getNumberOfElements());
    return new ResponseEntity<Page<DeliveryNoteDTO>>(pageDto,HttpStatus.OK);
}

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

问题是我正在返回Page而在我的restTemplate中我期待PagedResources,只返回页面是有意义的但我需要一个具体的类,我会使用PageImpl但问题是PageImple没有默认的构造函数RestTemplate用于映射响应,所以我做了什么我创建了一个新类并扩展了PageImpl,就像在这个问题的接受答案中提到的那样

Spring RestTemplate with paginated API