gpt4 book ai didi

spring-boot - 在 Kotlin 中创建 Spring 的 ParameterizedTypeReference 的实例

转载 作者:行者123 更新时间:2023-12-04 22:02:51 24 4
gpt4 key购买 nike

我正在尝试学习 Kotlin,并测试它如何与 Spring Boot 配合使用。我的应用程序使用 mongo 数据库来存储数据,我有一个 Jersey 资源来检索数据。我正在使用 spring-boot-test 测试它和 RestTestTemplate .
RestTestTemplate有一个 exchange方法采用 ParameterizedTypeReference .这个类有一个 protected 构造函数。所以我设法从 Kotlin 使用它的唯一方法是这样的:
class ListOfPeople : ParameterizedTypeReference<List<Person>>()
这是我的测试方法:

@Test
fun `get list of people`() {
// create testdata
datastore.save(Person(firstname = "test1", lastname = "lastname1"))
datastore.save(Person(firstname = "test2", lastname = "lastname2"))
datastore.save(Person(firstname = "test3", lastname = "lastname2"))
datastore.save(Person(firstname = "test4", lastname = "lastname2"))

val requestEntity = RequestEntity<Any>(HttpMethod.GET, URI.create("/person"))

// create typereference for response de-serialization
class ListOfPeople : ParameterizedTypeReference<List<Person>>() // can this be done inline in the exchange method?
val responseEntity : ResponseEntity<List<Person>> = restTemplate.exchange(requestEntity, ListOfPeople())

assertNotNull(responseEntity)
assertEquals(200, responseEntity.statusCodeValue)
assertTrue( responseEntity.body.size >= 4 )

responseEntity.body.forEach { person ->
println("Found person: [${person.firstname} ${person.lastname}] " +
", born [${person.birthdate}]")
}
}

这是正确的(或唯一的)方法,还是有更好的方法?

如果有帮助,这里是整个测试的链接: testclass on github

最佳答案

虽然使用对象表达式的答案是正确的,并且直接等效于您在 Java 中的操作方式,但如果您需要很多 ParameterizedTypeReference,具体化的类型参数允许您简化它。 s:

inline fun <reified T> typeReference() = object : ParameterizedTypeReference<T>() {}

// called as
restTemplate.exchange(requestEntity, typeReference<List<Person>>())

当编译器看到 typeReference<SomeType>调用,它被定义替换了,所以结果和你写的一样 object : ParameterizedTypeReference<SomeType>() {} .

关于spring-boot - 在 Kotlin 中创建 Spring 的 ParameterizedTypeReference 的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52581729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com