WebFlux功能:如何检测空的Flux并返回404?
我具有以下简化的处理程序功能(Spring
WebFlux和使用Kotlin的功能性API)。但是,我需要一个提示,当通量为空时,如何检测空的通量,然后对404使用noContent()。
fun findByLastname(request: ServerRequest): Mono<ServerResponse> { val lastnameOpt = request.queryParam("lastname")
val customerFlux = if (lastnameOpt.isPresent) {
service.findByLastname(lastnameOpt.get())
} else {
service.findAll()
}
// How can I detect an empty Flux and then invoke noContent() ?
return ok().body(customerFlux, Customer::class.java)
}
回答:
来自Mono
:
return customerMono .flatMap(c -> ok().body(BodyInserters.fromObject(c)))
.switchIfEmpty(notFound().build());
来自Flux
:
return customerFlux .collectList()
.flatMap(l -> {
if(l.isEmpty()) {
return notFound().build();
}
else {
return ok().body(BodyInserters.fromObject(l)));
}
});
请注意,collectList
这会在内存中缓冲数据,因此对于大列表而言,这可能不是最佳选择。可能有更好的方法来解决此问题。
以上是 WebFlux功能:如何检测空的Flux并返回404? 的全部内容, 来源链接: utcz.com/qa/429321.html