package demo; import reactor.rx.Stream; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.context.request.async.DeferredResult; @RestController public class PassportRestController { private final PassportService passportService; public PassportRestController(PassportService passportService) { this.passportService = passportService; } @RequestMapping("/{userId}/passport") public DeferredResult<Passport> passport(@PathVariable String userId) { DeferredResult<Passport> passportDeferredResult = new DeferredResult<>(); Stream<Bookmark> bookmarkStream = this.passportService.getBookmarks(userId); Stream<Contact> contactStream = this.passportService.getContacts(userId); this.passportService.getPassport(userId, contactStream, bookmarkStream) .consume(passportDeferredResult::setResult); return passportDeferredResult; } }