Próbuję napisać ładną owijkę Kotlina dla szkieletu WWW przeciwko kotlin 1.0.3. W tym staram się mixin funkcji do żądania, aby go zwrócić fasoli za pośrednictwem transformacji JSON przy użyciu jackson.W kotlinach, jak zwrócić instancję zdefiniowaną przez ogólny parametr klasy
Więc w mojej bibliotece mam następujący
private val mapper: ObjectMapper = ObjectMapper().registerModule(KotlinModule())
fun <T : Any> Request.asDataBean(type: KClass<T>): T = mapper.readValue(this.body(), type.java)
Ale kiedy goto użyć kodu jako takiego
post("/hello", { req, res ->
val bean = req.asDataBean(TestBean::class)
})
It błędy mówiąc, że wartość oczekiwana fasoli ma. Chcę, aby moje API działało jak wyżej, a to, co generyczna definicja "klasy", która jest przekazywana do metodyDataBean, jest typem zwracanej wartości.
Próbowałem zostały również
fun <T> Request.asDataBean(type: KClass<*>): T = mapper.readValue(this.body(), type.java) as T
jak również zmiany kodu wykorzystania do
val bean: TestBean = req.asDataBean(TestBean::class)
w nadziei, co działa, ale również daje dokładnie ten sam błąd przy użyciu kodu.
Jak mogę go użyć do generycznego zdefiniowanego przez typ klasy przekazany jako parametr (bardzo podobny do tego, jak wszystkie api działa w java)?
To dziwne, pierwszy fragment działa dla mnie w porządku. Czy mógłbyś podać minimalny samodzielny przykład bez zewnętrznych zależności? – voddan
Nie jestem pewien, czy rozumiem. Stworzyłem repozytorium github, aby pokazać kod na https://github.com/sepatel/kotlin-seed. To cały projekt i mam nadzieję, że pomoże on lepiej opisać ten problem? Błąd, który podaje to błąd kompilacji podczas korzystania z interfejsu API: "e: Main.kt: (23, 9): Oczekiwano wartości typu Dowolny e: Main.kt: (23, 34): Wnioskowanie typu nieudane : Za mało informacji, aby odczytać parametr T w zabawie Request.asData (type: KClass <*>): T " –
Ryba