我目前正在經歷一個非常奇怪和令人沮喪的問題。我有一些正在測驗的代碼,它們通過包含一系列過濾操作的反應式呼叫鏈運行。
當測驗通過代碼并回傳一個“假”值時,代碼仍然傳遞到鏈中的下一個呼叫,而不是僅僅回傳。
由于我仍然是一個“反應式新手”,我想我可能沒有在反應式代碼鏈中做錯什么。
這是代碼:
private Mono<GetCardNumberServiceResponseData> updateCardNumberIfLastFourValidAndShaIsNull(Card card, GetCardNumberServiceResponseData responseData) {
return Mono.just(responseData)
.filter(response -> isValidLastFour(card, response))
.defaultIfEmpty(responseData)
.filter(response -> shaIsNull(card))
.defaultIfEmpty(responseData)
.flatMap(response -> updateCardNumber(card, response));
}
這是評估不正確的部分:
.filter(response -> isValidLastFour(card, response))
這就是“isValidLastFour”目前的樣子:
private boolean isValidLastFour(Card card, GetCardNumberServiceResponseData responseData) {
// String cardNumberFromResponse = responseData.getCardNumber();
// String lastFourFromResponse =
// cardNumberFromResponse.substring(cardNumberFromResponse.length() - 4);
// return card.getLastFour().equals(lastFourFromResponse);
return false;
}
所以目前我只是將它硬編碼為回傳“false”,但是當我使用除錯器逐步完成測驗時,執行就像正在回傳“true”一樣直接通過,所以我真的很茫然可能導致這種行為的原因。
與往常一樣,任何和所有幫助總是非常感謝!
uj5u.com熱心網友回復:
如果你想responseData成為默認值,萬一有一個空的 Mono,你必須放在defaultIfEmpty鏈的末尾:
return Mono.just(responseData)
.filter(response -> isValidLastFour(card, response))
.filter(response -> shaIsNull(card))
.flatMap(response -> updateCardNumber(card, response))
.defaultIfEmpty(responseData);
更好的是,您可以合并這些過濾器:
return Mono.just(responseData)
.filter(response -> isValidLastFour(card, response) && shaIsNull(card))
.flatMap(response -> updateCardNumber(card, response))
.defaultIfEmpty(responseData);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/375998.html
標籤:春天 弹簧靴 反应式编程 弹簧-webflux 项目反应堆
上一篇:SpringBoot:server.tomcat.connection-timeout不作業
下一篇:如何將檔案的完整路徑添加到視圖?
