控制器接口
interface BrandController {
fun findDTOs(pageable: Pageable): ResponseEntity<Page<SomeDTO>>
}
简化了我的考试
var response: ResponseEntity<*>
@Test
fun `test`() {
`given TestRestTemplate`()
`when findDTOs`()
`then check body`()
}
protected fun `given not authorization`() {
restTemplate = TestRestTemplate()
}
private fun `when findDTOs`() {
// RestResponsePage<T> extends PageImpl<T>
response = restTemplate.getForEntity<RestResponsePage<SomeDTO>>(createUrlWithParams(url, requestPage))
}
private fun `then check body`() {
val body: Page<SomeDTO> = response.body as Page<SomeDTO> // body: "Page 2 of 2 containing java.util.LinkedHashMap instances"
assertEquals(requestPage.size, body.size) // success
val content: List<SomeDTO> = body.content as List<SomeDTO> // content: size = 10 body: "Page 2 of 2 containing java.util.LinkedHashMap instances"
content.forEachIndexed { index, someDTO: SomeDTO-> //Error
assertEquals(expectedList[index].name, someDTO.name)
assertEquals(expectedList[index].id, someDTO.id)
}
}
错误是:
java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com....SomeDTO
我如何以List<AnyDTO>
而不是List<java.util.LinkedHashMap>
的形式获取Page的内容
我通过TestRestTemplate返回JSON字符串来验证内容的正确性,但我想以此方式
答案 0 :(得分:0)
我不能说这里有什么特殊问题,但是通常我不会使用cf_scripts
来代表我的分页资源。您应该改为查看Spring HATEOAS。
您需要做的是扩展ResourceSupport
:
PageImpl
这将为您的班级提供hateoas链接。然后,您可以调用restTemplate接受此类型:
class PaginatedRestResponse(val dtos: List<AnyDTO>) : ResourceSupport()
您可以这样检索链接:
response = restTemplate.getForEntity<PaginatedRestResponse>(createUrlWithParams(url, requestPage))
答案 1 :(得分:0)
您可以使用“ ParameterizedTypeReference”。像这样:
val response = restTemplate.exchange("/messages/$username", HttpMethod.GET, null,
object : ParameterizedTypeReference<List<Message>>() {})