如何测试使用MockMvc返回可分页结果的SpringMvc控制器?

问题描述 投票:0回答:1

使用spring-boot 2.2.4。

我有一个SpringMvc控制器,它返回可分页的对象:

@RestController
@RequestMapping("/call-data")
public class CallDataController {
  @GetMapping
  public Page<CallDataDto> findAll(Pageable page) {
...

尝试使用MockMvc对其进行测试:

ObjectMapper mapper = new ObjectMapper();
MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.get("/call-data")).andReturn();
Page<CallDataDto> myDtos = mapper.readValue(mvcResult.getResponse().getContentAsString(), TypeUtils.pageTypeRef());

...

public class TypeUtils {
  public static <T> TypeReference<RestResponsePage<T>> pageTypeRef() {
      return new TypeReference<>() {
};
}

但不是使用dto对象的页面,而是使用LinkedHashMaps的页面。

那么如何获取带有dto对象的页面?

spring spring-boot spring-mvc mockmvc
1个回答
0
投票

类似的问题:ObjectMapper using TypeReference not working when passed type in generic method您可以通过将类型参数(T)替换为CallDataDto来解决此问题。

public class TypeUtils {
  public static TypeReference<RestResponsePage<CallDataDto>> pageTypeRef() {
      return new TypeReference<>() {
};
}

类型参数(例如<T>)在运行时不存在,因此您必须将其替换为一些具体值,以便Jackson可以获取完整的泛型类型信息。

© www.soinside.com 2019 - 2024. All rights reserved.