【发布时间】:2020-08-22 17:39:05
【问题描述】:
使用下面的实现,如果Mono<Optional<Item>> 为空,它会转到switchIfEmpty,但不能按预期工作。
public Mono<ServerResponse> getItemById(ServerRequest request) {
JwtClaim claim = retrieveClaimFromRequest(request);
String itemId = request.pathVariable("itemId");
Mono<ServerResponse> notFound = ServerResponse.notFound().build();
Mono<Optional<Item>> item = Mono.just(itemRepository.findById(Long.parseLong(itemId)));
return item
.flatMap(retItem -> ServerResponse.ok().contentType(APPLICATION_JSON).bodyValue(retItem))
.switchIfEmpty(notFound);
}
【问题讨论】:
-
您确定要使用
Mono<Optional<Object>>吗?bodyValue将设置为Optional<Item>,而不是Item。还有你使用flatMap而不是map的具体原因吗? -
另外,
Mono属于哪个框架?我猜是反应堆? -
@Turing85,你是对的,它给出了 Optional
- 。最好的处理方法是什么?
-
Mono<Item> item = Mono.just(itemRepository.findById(Long.parseLong(itemId)).orElse(null));可以修复它,但不是空安全的。如果您希望findById返回某些内容,您可能希望通过调用orElseThrow(...)来引发适用的异常。 -
如果 NotFound 为空,我想返回它。
标签: spring java-8 optional spring-webflux project-reactor