Kotlin 在一个响应中发送不同类型的多个通量
如果我有这样的代码:Kotlin 在一个响应中发送不同类型的多个通量,kotlin,spring-webflux,project-reactor,reactor,Kotlin,Spring Webflux,Project Reactor,Reactor,如果我有这样的代码: data class Response( val a: String, val b: List<String>, val c: Int, ) fun buildResponse(): Response { val a: Mono<String> = getA() val b: Flux<String> = getB() val c: Mono<Int> = getC() return Respo
data class Response(
val a: String,
val b: List<String>,
val c: Int,
)
fun buildResponse(): Response {
val a: Mono<String> = getA()
val b: Flux<String> = getB()
val c: Mono<Int> = getC()
return Response(
a = a.blockOptional().orElseThrow(),
b = b.collectList().blockOptional().orElseThrow(),
c = c.blockOptional().orElseThrow(),
)
}
数据类响应(
瓦尔:字符串,
val b:列表,
val c:Int,
)
fun buildResponse():响应{
val a:Mono=getA()
valb:Flux=getB()
val c:Mono=getC()
返回响应(
a=a.blockOptional().orelsetrow(),
b=b.collectList().blockOptional().OrelsThrow(),
c=c.blockOptional().orelsetrow(),
)
}
是否有一种方法可以反应性地返回一个
Mono
,而不是阻塞并返回实际的响应
?当然-看看Mono.zip
操作符,它允许您将多个发布者合并到一个Mono中。基本的Mono.zip
变体只返回一个元组,但您也可以指定自己的类(Response
,在本例中),如下所示:
返回Mono.zip(
函数{eles:Array->
响应(元素[0]为字符串,
eles[1]作为列表,
eles[2]as Int)
},
a、 b.集合列表(),c)
您看过zip
运算符了吗?没有,您能键入一个简短的示例吗?当然,请看我的答案。(kotlin语言标签可能也有助于在此处获得更快的答案。)
return Mono.zip(
Function { eles: Array<Any> ->
Response(eles[0] as String,
eles[1] as List<String>,
eles[2] as Int)
},
a, b.collectList(), c)