我具有以下简化的处理程序功能(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:
Mono
return customerMono .flatMap(c -> ok().body(BodyInserters.fromObject(c))) .switchIfEmpty(notFound().build());
来自Flux:
Flux
return customerFlux .collectList() .flatMap(l -> { if(l.isEmpty()) { return notFound().build(); } else { return ok().body(BodyInserters.fromObject(l))); } });
请注意,collectList这会在内存中缓冲数据,因此对于大列表而言,这可能不是最佳选择。可能有更好的方法来解决此问题。
collectList