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

回到顶部