我是回應式編程的新手,遇到了這個問題:
[
{
"customerDTO": {
"scanAvailable": true
},
"bankAccountDTOs": {
"scanAvailable": true,
"prefetch": -1
}
}
]
DTO:
public class ResponseClientDTO {
private Mono<CustomerDTO> customerDTO;
private Flux<BankAccountDTO> bankAccountDTOs;
}
服務:
public Flux<ResponseClientDTO> getCustomerWithBankAccounts(String customerId){
Flux<BankAccountDTO> bankAccounts = webClient
.get()
.uri(uriBuilder ->
uriBuilder.path("customers")
.queryParam("customerId", customerId).build())
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(BankAccountDTO.class);
Mono<CustomerDTO> cMono = findOne(customerId);
ResponseClientDTO responseClientDTO = new ResponseClientDTO();
responseClientDTO.setBankAccountDTOs(bankAccounts);
responseClientDTO.setCustomerDTO(cMono);
return Flux.just(responseClientDTO);
}
我從另一個 API 查詢端點,它回傳一個Flux<BankAccounts>. 我想得到客戶的所有銀行賬戶。
uj5u.com熱心網友回復:
這不是您在反應式堆疊中想要的。首先,更改您的 DTO,使其不包含Monoand Flux,而是包含CustomerDTOand List<BankAccountDTO>:
public class ResponseClientDTO {
private CustomerDTO customerDTO;
private List<BankAccountDTO> bankAccountDTOs;
}
然后,您需要重新安排您的方法以回傳 aMono<ResponseClientDTO>并更改處理Fluxand的邏輯Mono:
public Mono<ResponseClientDTO> getCustomerWithBankAccounts(String customerId){
Flux<BankAccountDTO> bankAccounts = webClient
.get()
.uri(uriBuilder ->
uriBuilder.path("customers")
.queryParam("customerId", customerId).build())
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(BankAccountDTO.class);
Mono<CustomerDTO> cMono = findOne(customerId);
return bankAccounts.collectList().zipWith(cMono).map(data -> {
ResponseClientDTO responseClientDTO = new ResponseClientDTO();
responseClientDTO.setBankAccountDTOs(data.getT1());
responseClientDTO.setCustomerDTO(data.getT2());
})
}
(抱歉任何 Java 拼寫錯誤,但此時我已經習慣了 Kotlin)。
考慮查看以下有用的在線資源:
- https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html
- https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Flux.html
- https://projectreactor.io/docs/core/release/reference/#which-operator
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/410308.html
標籤:
