我知道它是異步的,因此我要保存的值將為空(我檢查過)。我該如何解決這個問題,以便正確保存所有內容?
我想保存一個檔案,同時獲取 MongoDB 生成的 ID 以保存到另一個 API。
public Mono<BankAccountDTO> save(BankAccountDTO bankAccount) {
return mongoRepository.save(AppUtils.dtoToEntity(bankAccount))
.doOnNext(d -> {
CustomerRoleDTO cDto = new CustomerRoleDTO();
cDto.setBankAccountid(d.getId());
cDto.setClientId(bankAccount.getCustomerId());
webClient.post()
.uri("http://localhost:9292/api/v1/example")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.body(Mono.just(cDto), CustomerRoleDTO.class)
.retrieve()
.bodyToMono(CustomerRoleDTO.class);
}).map(AppUtils::entityToDTO);
}
uj5u.com熱心網友回復:
您通過不處理 wbClient 呼叫的回傳來破壞鏈條,因此反應器無法滿足組裝時間。
(我沒有檢查過編譯器,但類似這樣)
public Mono<BankAccountDTO> save(BankAccountDTO bankAccount) {
return mongoRepository.save(AppUtils.dtoToEntity(bankAccount))
.flatMap(d -> {
CustomerRoleDTO cDto = new CustomerRoleDTO();
cDto.setBankAccountid(d.getId());
cDto.setClientId(bankAccount.getCustomerId());
// you cant ignore the return
return webClient.post()
.uri("http://localhost:9292/api/v1/example")
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
.body(Mono.just(cDto), CustomerRoleDTO.class)
.retrieve()
.bodyToMono(CustomerRoleDTO.class)
.thenReturn(d);
});
}
在這里您可以閱讀更多關于assembly time.
組裝與訂閱
uj5u.com熱心網友回復:
使用flatmap代替doOnNext
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/415009.html
標籤:
