1. ホーム
  2. java

[解決済み] Spring MVCまたはSpring-Bootで異なるタイプのResponseEntityを返す最良の方法は何ですか?

2023-05-13 21:28:50

質問

Spring MVC 4 (またはSpring-Boot)を使用して、簡単なレストアアプリケーションを書きました。コントローラ内で ResponseEntity . しかし、場合によっては、成功のJSONを与えたいし、検証エラーの場合は、エラーのJSONを与えたいと思います。現状ではsuccessとerrorのレスポンスは全く異なるので、errorとsuccessで2つのクラスを作成しました。コントローラ内では ResponseEntity<Success> を返したい。そうでない場合は ResponseEntity<Error> . 何か方法はないでしょうか。

SuccessError は、成功とエラーのレスポンスを表現するために使用する2つのクラスです。

どのように解決するのですか?

Springの @ControllerAdvice を使用して、エラーを処理することをお勧めします。読む このガイド を読むと、Spring Bootエラー処理"というセクションから、良い導入ができます。詳細な議論については 記事 をご覧ください。

この仕組みについて簡単にまとめてみました。

  • コントローラのメソッドが返すのは ResponseEntity<Success> . エラーや例外のレスポンスを返すことはありません。
  • すべてのコントローラの例外を処理するクラスを実装します。 このクラスのアノテーションは @ControllerAdvice
  • このコントローラアドバイスクラスには @ExceptionHandler
  • 各例外ハンドラメソッドは、一つまたは複数の例外タイプを処理するように設定されます。これらのメソッドでは、エラーに対するレスポンスタイプを指定します。
  • この例では、検証エラーのための例外ハンドラメソッドを (コントローラのアドバイスクラスで) 宣言することになります。 戻り値の型は ResponseEntity<Error>

このアプローチでは、APIのすべてのエンドポイントに対して、コントローラの例外処理を一か所で実装するだけでよいのです。また、あなたのAPIでは、すべてのエンドポイントで統一された例外レスポンス構造を持つことが容易になります。これにより、クライアントの例外処理を簡略化することができます。