使用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对象的页面?
答案 0 :(得分: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
可以获取完整的泛型类型信息。