3つのサービスA(Bに直接関連する)、b(Cに直接関連する)、CというユーザーがサービスAを呼び出すと仮定しますが、任意の数のサービスに適用できます。
エラーがサービスC(例外がスロー)で発生した場合、私は簡単にあなたにアプローチ
を説明します、あなたのコードは、例外をキャッチし、意味のある応答を返す必要があります。私は@ControllerAdvice
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(YourException.class)
public ResponseEntity<ApiErrorDto> handleYourException(YourException e) {
return ResponseEntity
.status(HttpStatus.BAD_REQUEST) //or any other suitable
.body(new ApiError(e.getMessage());
}
}
ApiError
だろうと考えることができ、最も簡単なメッセージ、またはあなたの例外処理のために意味のある他のフィールドを保持する単一のフィールドを持つだけで、基本的なPOJOクラスである可能性があります。
あなたのサービスBが応答を受け取ったら、それは期待されるステータスコードかエラーステータスコードかどうかをチェックし、それに応じて行動する必要があります。
あなたのApiError
クラスは、すべてのサービス間で共有して、あらゆる場所で簡単にシリアライズ/デシリアライズできるようにする必要があります。そのようにしてエラーが発生すると、次に何をするかを決めることができます。シナリオの1つでは、サービスBのExceptionHandlerが他の例外をスローする可能性があります。
これは初心者です。あなたのApiError
のメッセージ、または多分何らかの意味のあるコードなどがあります。結論としては、エラーが発生したサービスの応答にその情報を含めて、その情報を呼び出し元のサービスで解釈する必要があります。
サービスの通信方法 – SirKometa
休憩のような投稿経由で/ – Stev
を取得するので、AはBを呼び出し、BはCとCが例外をスローします。 – SirKometa