Ich versuche besseren Weg zu finden mehrere Ausnahmen in folgenden Code zu behandeln:java.util.concurrent.CompletionStage - Wie behandelt man Ausnahmen?
public CompletionStage<Result> getRepositoryInfo(String repositoryOwner, String repositoryName) {
return repositoryInfoService.getRepositoryInfo(repositoryOwner, repositoryName)
.handle((repositoryInfo, ex) -> {
if (repositoryInfo != null) {
return ok(Json.toJson(repositoryInfo));
} else {
if (ex.getCause() instanceof GithubRepoNotFoundException) {
return notFound(Json.toJson("repo not found"));
} else {
return internalServerError(Json.toJson("internal error"));
}
}
});
}
Dieses Programm wird GitHub Repo-Namen und Besitzer und gibt einige grundlegende Informationen (wie Name, Beschreibung, geklont url etc.) . repositoryInfoService.getRepositoryInfo()
gibt das Objekt zurück oder wirft entweder GithubRepoNotFoundException
oder GithubApiException
. Diese instanceof
sieht wirklich hässlich aus und ich bin nicht glücklich damit. Eine andere Option ist rethrow ex.getCause()
, aber es ist auch scheiße.
aussehen würde auf diese Weise zu breit ist. Außerdem können Sie diesen Lambda-Ausdruck vereinfachen: '.handle ((repositoryInfo, ex) -> repositoryInfo! = Null? Ok (Json.toJson (repositoryInfo)): ex.getCause() instanceof GithubRepoNotFoundException? NotFound (Json.toJson ("Repo nicht gefunden")): internalServerError (Json.toJson ("interner Fehler"))); '(Stellen Sie sich eine bessere Formatierung vor als SO Kommentare zulassen ...) – Holger
Was ist zu breit? – Aleksander
Die Art und Weise, wie Sie mit Ihren Ausnahmen umgehen, hängt davon ab, wie Sie Ihre gesamte Anwendung entwerfen. Es macht keinen Sinn, Ihnen zu sagen, wie Sie mit einem bestimmten asynchronen Job umgehen sollen. Ich bin ziemlich sicher, dass die drei Methoden 'ok',' notFound' und 'internalServerError' grundsätzlich gleich sind und sich nur in kleinen Aspekten (z. B. dem http-Statuscode, den sie senden) unterscheiden, der in einem Parameter eingekapselt sein könnte. Ein Redesign in Bezug auf diese Methoden würde also völlig andere (wahrscheinlich elegantere) Möglichkeiten ermöglichen, mit den Ausnahmen umzugehen. – Holger