如何使用MockMvc测试返回可分页结果的SpringMvc控制器?
使用弹簧靴2.2.4 我有一个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
@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<>() {
};
}