【发布时间】:2021-05-02 07:53:57
【问题描述】:
在将 Spring WebFlux 与 Kotlin 协程结合使用时,我很难理解所谓的简单 RESTful WS 响应处理场景。假设我们的 REST 控制器中有一个简单的 WS 方法,它应该返回可能大量(数百万)的响应“事物”:
@GetMapping
suspend fun findAllThings(): Flow<Thing> {
//Reactive DB query, return a flow of things
}
这符合预期:只要使用流媒体类型(例如“application/x-ndjson”),结果就会流式传输到客户端。在更复杂的服务调用中,也考虑到错误/警告的可能性,我想返回以下形式的响应对象:
class Response<T> {
val errors: Flow<String>
val things: Flow<T>
}
这里的想法是响应要么成功(返回空错误流和事物流),要么失败(错误包含在相应的流中,而事物流为空)。在阻塞编程中,这是一个非常常见的响应习语。我现在的问题是如何使这个习语适应 Kotlin/Spring WebFlux 中的反应式方法?
我知道它可以只返回描述的响应(或 Mono
【问题讨论】:
标签: spring kotlin spring-webflux kotlin-coroutines