Котлин - как использовать BodyToMono с обобщенными и вложенными классами |WebFlux - PullRequest
0 голосов
/ 04 июня 2018

Я не могу заставить его работать, чтобы отобразить ответ WebClient на класс данных с обобщениями и / или с вложенными классами данных в Kotlin.Я использую Spring 5 с WebFlux и Reactive MongoDB

Вот мой код ответа WebClient и .map() ответа на класс данных.

        var response = CreateBittrexUrl("/account/getbalances", "GET")
            .getWebClient()
            .map { it to Test.Result::class.java } <-- does not work
            .flatMap { it.bodyToMono(Test.Result::class.java) } <-- does not work
            .flatMap { it.toEntity(Wrapper<Account>().retrieveSomething()::class.java) } <-- does also not work with generics

Здесьмои классы данных, которые вложены.Мне нужно получить результат переменной.

@JsonIgnoreProperties(ignoreUnknown = true)
data class Test(
    @JsonProperty("success") val success: Boolean = false,
    @JsonProperty("message") val message: String = "",
    @JsonProperty("result") val result: List<Result> = emptyList()
) {

data class Result(
    @JsonProperty("Currency") val currency: String?,
    @JsonProperty("Balance") val balance: Double,
    @JsonProperty("Available") val available: Double,
    @JsonProperty("Pending") val pending: Double,
    @JsonProperty("CryptoAddress") val cryptoAddress: String?,
    @JsonProperty("Requested") val requested: Boolean,
    @JsonProperty("Uuid") val uuid: Any?
)

универсальная версия;обратите внимание, что я использую встроенную функцию для получения данных class.java из Generic, который я вставляю.Это необходимо для BodyToMono() метода

data class Wrapper<T: Any>(var succes: Boolean? = false,
                                  var message: String? = "",
                                  var result: T? = null) {

    inline fun <reified T: Any> retrieveSomething() = T::class.java
}

И вот сообщение об ошибке, которое я получаю при выполнении запроса:

{
  "timestamp": "2018-06-03T21:03:52.876+0000",
  "path": "/account/getbalances",
  "status": 500,
  "error": "Internal Server Error",
  "message": "JSON encoding error: object is not an instance of declaring class; nested exception is com.fasterxml.jackson.databind.JsonMappingException: object is not an instance of declaring class (through reference chain: java.util.ArrayList[0]->kotlin.Unit[\"success\"])"
}
...