0

レイヤードアプリケーションでは、Spring Annotation @ResponseStatusを使用して例外のHTTPコードを定義する必要があります。例えばJava例外のHTTPコード

@ResponseStatus(value = HttpStatus.BAD_REQUEST, reason = "Illegal argument") 
public class IllegalContentException{ 


} 

それは動作しますが、私は、これは(例外はHTTPコードを知っている、このアプローチでは)シングル信頼と責任感のパターンを破る避けるしようとしている悪い習慣があるかどうかを知りたいと思います。

質問です:

  • 万一HTTPコードがカウントには、彼らが属する層を取ることなく、例外で定義されていますか? DAO、サービス層、および/またはコントローラに属する例外でHTTPコードを定義する必要がありますか?

答えて

2

あなたは、各例外に応答コードを入れたくない場合は、一つの選択肢は@ExceptionHandler@ResponseStatus注釈付きメソッドからなる@ControllerAdviceクラスでの集中例外ハンドラを作成することです。

@ControllerAdvice 
public class CentralizedExceptionHandler { 

    @ExceptionHandler(IllegalContentException.class) 
    @ResponseBody 
    @ResponseStatus(HttpStatus.BAD_REQUEST) 
    public String handleError(IllegalContentException e) { 
     return "Illegal argument"; 
    } 
} 
+0

私はこの種のアプローチが好きです。例外ごとにHTTP設定を指定するよりも優れています。私はControllerAdviceアノテーションについて知らなかった、それを試してみるだろう。ありがとう! –

0

私は答えはhttps://spring.io/blog/2013/11/01/exception-handling-in-spring-mvcに最初に見つけることができます信じて。

コピーしてウェブサイトから&ペースト:。。 「ゴールはコントローラのメソッド可能な場合には、明示的に例外を処理しないようにされた彼らは、より良い、専用コードで別々に扱わ横断的関心事である

3つのオプションがあります。例外ごとに、コントローラーごとに、またはグローバルに適用されます。

+0

便利なリンクありがとうございます。実際には3つの選択肢がありますが、どちらがベストプラクティスなのか疑問です。横断的な関心事として取り上げることはポイントのように聞こえるが、各例外に対して複数の責任を与えることも1つである。 –