Как сериализовать ответ WebClient на Mono с обобщениями в Kotlin? - PullRequest
0 голосов
/ 15 апреля 2020

Предположим, у меня есть следующее

return webClient
                .get()
                .uri { uriBuilder: UriBuilder ->
                    uriBuilder.path(myUrl)
                            .queryParam("page", pageable.pageNumber)
                            .queryParam("size", pageable.pageSize)
                            .build()
                }
                .retrieve()

Я ожидаю, что у меня будет такой результат:

PagedResult<MyObject>

PagedResult прост

data class PagedResult<T>(
        val content: Iterable<T>,
        val total: Long,
        val page: Int,
        val size: Int)

MyObject тривиален POJO также

Я пытаюсь сделать следующее:

return webClient
                .get()
                .uri { uriBuilder: UriBuilder ->
                    uriBuilder.path(poolServiceControllerUrl)
                            .queryParam("page", pageable.pageNumber)
                            .queryParam("size", pageable.pageSize)
                            .build()
                }
                .retrieve()
                .bodyToMono(PagedResult<MyObject>::class.java)

Это возвращает мне ошибку только классы разрешены в левой части литерала класса

ОК, пытаюсь исправить это следующим образом:

val type: Type = object : TypeToken<PagedResult<MyObj>>() {}.type

        return webClient
                .get()
                .uri { uriBuilder: UriBuilder ->
                    uriBuilder.path(myUrl)
                            .queryParam("page", pageable.pageNumber)
                            .queryParam("size", pageable.pageSize)
                            .build()
                }
                .retrieve()
                .bodyToMono(type.javaClass)

Возвращает мне com.faster xml .jackson.databind.ex c .InvalidDefinitionException: невозможно создать экземпляр `com.google.gson.internal. $ Gson $ Types $ ParameterizedTypeImpl

...