Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MockMvc测试返回可分页结果的SpringMvc控制器?_Spring_Spring Boot_Spring Mvc_Mockmvc - Fatal编程技术网

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

如何使用MockMvc测试返回可分页结果的SpringMvc控制器?,spring,spring-boot,spring-mvc,mockmvc,Spring,Spring Boot,Spring Mvc,Mockmvc,使用弹簧靴2.2.4 我有一个SpringMvc控制器,它返回可分页对象: @RestController @RequestMapping("/call-data") public class CallDataController { @GetMapping public Page<CallDataDto> findAll(Pageable page) { ... @RestController @请求映射(“/call data”) 公共类CallDataControll

使用弹簧靴2.2.4

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

@RestController
@RequestMapping("/call-data")
public class CallDataController {
  @GetMapping
  public Page<CallDataDto> findAll(Pageable page) {
...
@RestController
@请求映射(“/call data”)
公共类CallDataController{
@GetMapping
公共页面findAll(可分页页面){
...
尝试使用MockMvc对其进行测试:

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

公共类TypeUtils{
公共静态类型引用pageTypeRef(){
返回新的TypeReference(){
};
}
但我得到的页面不是带有dto对象的页面,而是带有LinkedHashMaps的页面

那么,如何获得包含dto对象的页面呢?

类似的问题:

您可以通过将类型参数(
T
)替换为
CallDataDto
来解决此问题

public class TypeUtils {
  public static TypeReference<RestResponsePage<CallDataDto>> pageTypeRef() {
      return new TypeReference<>() {
};
}
公共类TypeUtils{
公共静态类型引用pageTypeRef(){
返回新的TypeReference(){
};
}
类型参数(例如,
)在运行时不存在,因此您必须用一些具体的值替换它们,以便
Jackson
可以获得完整的泛型类型信息

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