[英]Handling CompletableFuture exceptions in controller
我正在嘗試為我正在運行的項目進入CompletableFuture
class ,我在這里遇到了一些問題:
有以下方法:通過ID或hash嘗試查找會話; 如果沒有找到,它會拋出異常。 到目前為止,一切都很好。
public ConversationOutput getConversationByIdOrHash(String conversationIdOrHash)
throws ConversationNotFoundException {
Conversation conversation = this.conversationRepository.getByIdOrHash(conversationIdOrHash);
if (conversation == null) {
throw new ConversationNotFoundException(conversationIdOrHash);
}
return this.modelMapper.map(conversation, ConversationOutput.class);
}
請注意,我正在從我的方法簽名中拋出ConversationNotFoundException
。 我的 SpringBoot controller 正在對此異常做出反應,並且從一開始就一切正常。
我想要做的是使它成為CompletableFuture
返回並實際拋出異常,類似於:
public CompletableFuture<ConversationOutput> getConversationByIdOrHashAsync(String conversationIdOrHash)
throws ConversationNotFoundException {
return CompletableFuture.supplyAsync(() -> this.getConversationByIdOrHash(conversationIdOrHash));
}
我看過人們使用exceptionally
處理異常的帖子,但我真正想做的是將它扔到我的 controller 並讓它處理它。 關於如何制作的任何建議?
謝謝你們!
問題是您是否關心CompletableFuture
的結果。 CompletableFuture
就像一個特殊的任務,它在其他線程上處理。 如果您不調用.join()
,您將不會收到CompletableFuture
的結果。 如果發生任何異常,此方法也將傳播異常。 但是,它等待CompletableFuture
完成並阻止請求。 但是,沒有等待就無法從CompletableFuture
內部獲取異常,您必須像對待其他任務一樣對待它。
如果成功,您可以傳遞已完成的未來,以及失敗的未來以及您的自定義異常。
public CompletableFuture<ConversationOutput> getConversationByIdOrHashAsync(String conversationIdOrHash) {
try {
return CompletableFuture.completedFuture(this.getConversationByIdOrHash(conversationIdOrHash));
} catch (ConversationNotFoundException e) {
return CompletableFuture.failedFuture(e);
}
}
然后在您的 controller 級別,您可以處理異常。
final CompletableFuture<ConversationOutput> future = getConversationByIdOrHashAsync("idOrHash");
future.whenComplete((r, e) -> {
if (e != null) {
if (e instanceof ConversationNotFoundException) {
//handling
}
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.