ich derzeit versuche Reactor zu verstehen und eine Service-Methode Refactoring, die ein Optional<CompanyDetails>
zurück Mono<CompanyDetails>
anstelle des Reaktors zu verwenden:eine Mono <T> in einem Frühlings-Web-Controller Konsumieren
public Mono<CompanyDetails> findOne(String id) {
CompanyDetails result = retrieveFromSomewhere(id);
return Mono.justOrEmpty(result);
}
Von meinem Verständnis dieser entweder empty()
emittieren sollte oder just(result)
. ich verbrauchen den Dienst in einem Frühlings-Web-Controller wie folgt aus:
@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;
}
Dies funktioniert gut, wenn ein Ergebnis gefunden wurde, aber wenn findOne
empty()
emittiert es läuft in ein Timeout. Ich könnte get()
explizit anrufen und nach null
suchen, aber das fühlt sich total falsch an.
Auch: Vor dem Refactoring, getCompany
warf eine NotFoundException
wenn kein Ergebnis gefunden wurde, ist das überhaupt möglich, oder bin ich auf dem falschen Weg vollständig?