У меня есть простой Spring Boot WebFlux
API, и я пытаюсь использовать Ktor
для его вызова.
Вот мой контроллер
@RestController
@RequestMapping("api/v1")
class TestController {
@RequestMapping(method = [RequestMethod.GET], value = ["/values"], produces = [MediaType.TEXT_EVENT_STREAM_VALUE])
fun sayHello(@RequestParam(value = "name") name:String): Flux<Example> {
return Flux.interval(Duration.ofSeconds(1))
.map { Example(number = generateNumber()) }
.share()
}
fun generateNumber(): Int{
return ThreadLocalRandom.current().nextInt(100)
}
}
Он просто возвращает объект с номером каждую секунду
Теперь на стороне клиента я хочу использовать Ktor для получения данные, но я не уверен, что делать. Чтение документов выглядит так: Потоковая передача по области - это то, что мне нужно, но я не уверен, как заставить его работать с моим контроллером
Вот код клиента, который у меня есть.
suspend fun getData(): Flow<Example> {
return flow {
val client = HttpClient()
client.get<HttpStatement>("http://192.168.7.24:8080/api/v1/values?name=hello").execute{
val example = it.receive<Example>()
emit(example)
}
}
}
Когда я пытаюсь сделать вызов на клиенте Android
, я получаю эту ошибку
NoTransformationFoundException: преобразование не найдено: class io.ktor.utils.io.ByteBufferChannel ( Kotlin отражение недоступно)
Похоже, я не могу просто сериализовать поток в свой объект, так как мне сериализовать ByteReadChannel
в объект?
Это моя первая попытка весны и ктор