当结合使用springwebflux和kotlin协程时,我很难理解一个简单的restfulws响应处理场景。假设我们的rest控制器中有一个简单的ws方法,该方法可能返回大量(数百万)响应“things”:
@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/springwebflux中的被动方法?
我知道可以只返回所描述的响应(或者对于java用户来说是mono),但是这在一定程度上违背了被动响应的目的,因为整个mono必须在序列化时存在于内存中。有什么办法解决这个问题吗?我现在能想到的唯一可能的解决方案是一个定制的spring编码器,它足够聪明,可以传输错误或事物(无论存在什么)。
1条答案
按热度按时间fcy6dtqo1#
每次返回成功/错误如何
Thing
?