【发布时间】:2016-05-12 07:57:54
【问题描述】:
我目前正在尝试了解 Reactor,并重构了一个返回 Optional<CompanyDetails> 的服务方法,以改用 Reactor 的 Mono<CompanyDetails>:
public Mono<CompanyDetails> findOne(String id) {
CompanyDetails result = retrieveFromSomewhere(id);
return Mono.justOrEmpty(result);
}
据我了解,这应该发出 empty() 或 just(result)。
我像这样在 Spring Web Controller 中使用该服务:
@RequestMapping(value = "{id}", method = RequestMethod.GET)
public DeferredResult<CompanyDetails> getCompany(@PathVariable String id) {
final DeferredResult<CompanyDetails> result = new DeferredResult<>();
companyService.findOne(id)
.consume(result::setResult);
return result;
}
如果找到结果,这会正常工作,但如果 findOne 发出 empty() 它会超时。我可以显式调用get() 并检查null,但这感觉完全错误。
另外:在重构之前,getCompany 抛出了 NotFoundException 如果没有找到结果,这有可能吗,还是我完全走错了轨道?
【问题讨论】:
标签: spring-mvc asynchronous reactor