我正在尝试学习Kotlin,并测试它在Spring Boot中如何工作。我的应用程序使用mongo数据库存储数据,我有一个Jersey资源来检索数据。我正在使用spring-boot-test
和RestTestTemplate
进行测试。
RestTestTemplate
具有一个exchange
的{{1}}方法。此类具有受保护的构造函数。因此,我设法在Kotlin上使用它的唯一方法是:
ParameterizedTypeReference
这是我的测试方法:
class ListOfPeople : ParameterizedTypeReference<List<Person>>()
这是正确的(或唯一的)方法吗?还是有更好的方法?
如果有帮助,这里是整个测试的链接:testclass on github
答案 0 :(得分:6)
虽然使用对象表达式的答案是正确的,并且与您在Java中的实现方式直接等效,但是如果需要许多ParameterizedTypeReference
,则经过修饰的类型参数可以简化该表达式:
inline fun <reified T> typeReference() = object : ParameterizedTypeReference<T>() {}
// called as
restTemplate.exchange(requestEntity, typeReference<List<Person>>())
当编译器看到typeReference<SomeType>
调用时,它将被定义替换,因此结果与您编写object : ParameterizedTypeReference<SomeType>() {}
的结果相同。
答案 1 :(得分:3)
感谢JB Nizet向我指出了正确的文档。
val responseEntity : ResponseEntity<List<Person>> =
restTemplate.exchange(requestEntity,
object: ParameterizedTypeReference<List<Person>> () {})
如果我没看错,这称为对象表达式。