java如何让服务层在不从数据库获取任何内容时返回Mono::错误
我使用这个代码块从Couchbase检索一些数据,但是当它无法获取任何数据时,它不会调用onErrorResume
块。当代码找不到与键匹配的文档时,有没有办法让它调用onErrorResume
return referenceService.getReferenceTable(referenceKey)
.flatMap(referenceTable -> {
logger.info("reference table: {}", referenceTable.toString());
Market market = getMarket(aggregate.getDate(), aggregate.getMarket(), referenceTable);
aggregate.setMarket(market);
return Mono.just(aggregate);
})
.onErrorResume(e -> {
logger.info("Error getting reference table");
return Mono.error(e);
});
正在使用的服务层如下所示:
@Service("referenceService")
public class CouchbaseReferenceService implements ReferenceService {
@Autowired
private ReferenceRepository referenceRepository;
@Override
public Mono<ReferenceTable> getReferenceTable(String key) {
return referenceRepository.getReferenceTable(key);
}
}
# 1 楼答案
当找不到具有给定
key
的ReferenceTable
时referenceRepository.getReferenceTable(key)
返回空Mono
从存储库的角度来看,这不是错误情况。要将空的
Mono
视为错误条件,可以在流中使用.switchIfEmpty(Mono.error(...))
以下是应用^{} 的示例:
此外,我还对您的示例做了两个其他更改:
.flatMap
实现是一个同步的1对1映射,所以可以使用.map
,就像我上面所做的那样李>.onErrorResume
实现返回的异常与观察到的异常相同,因此可以像我上面所做的那样使用.doOnError
,允许原始异常继续传播李>