グローバル例外の処理
8861 ワード
Springでの異常処理方法はいろいろあります.方法はtry/catch処理を用いてもよいし、コントローラ内の異常を
グローバルでの例外の処理
まず、なぜグローバルで例外処理を行うのですか?
but!!
グローバル例外処理は、上記の問題を解決することができる.
だから全境はどのように例外を処理しますか? 次に、アプリケーション内のすべてのコントローラの例外を1つの場所で管理できる、態様向けのプログラミング(AOP)です.
どのように使いますか.
私は全局の異常を処理する時、この点に興味を持っています.
では、
いいえ.
コントローラに
理由は何ですか. 簡単に言えば、
では、
もちろんあります.
参考資料
「Spring Boot」(Spring Boot)エラー処理:
@ExceptionHandler
処理してもよい.しかし、グローバルに発生した異常をどのように処理するかを理解する必要があります.グローバルでの例外の処理
まず、なぜグローバルで例外処理を行うのですか?
@ExceptionHandler
を使用してコントローラに異常処理を行います.@RestController
public class LineController {
// ...
@GetMapping("/lines")
public ResponseEntity<List<LineResponse>> getLines() {
// ...
}
@PostMapping("/lines")
public ResponseEntity<LineResponse> createLine(@RequestBody LineRequest lineRequest) {
// ...
}
@ExceptionHandler(LineException.class)
public ResponseEntity<ErrorResponse> handleLineException(final LineException error) {
// ...
}
}
コントローラに発生した異常はhandleLineException
メソッドで処理できます.しかし、コントローラが増えたら?コントローラの増加に伴い、異常処理に対する重複コードも増加し、大量のコードが関連する.このようにメンテナンスも難しくなります.but!!
グローバル例外処理は、上記の問題を解決することができる.
だから全境はどのように例外を処理しますか?
@ControllerAdvice
または@RestControllerAdvice
を使用してグローバル例外処理を行います.@RestControllerAdvice
は@ControllerAdvice
+@ResponseBody
である.(感覚像@Controller
と@RestController
)どのように使いますか.
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(LineException.class)
public ResponseEntity<ErrorResponse> handleLineException(final LineException error) {
// ...
}
// ...
}
コントローラで発生したすべての異常は、@RestControllerAdvice
によってキャプチャされ、@ExceptionHandler
によって個別にキャプチャされ、処理されます.私は全局の異常を処理する時、この点に興味を持っています.
では、
@Controller
の例外は@ControllerAdvice
の例外は@RestController
の例外ですか?いいえ.
@RestControllerAdvice
で異常が発生した場合は@Controller
でキャプチャすることができ、@RestControllerAdvice
で異常が発生した場合は@RestController
で異常をキャプチャすることができる.コントローラに
@ControllerAdvice
が追加されましたが、グローバルExceptionHandlerにRestController
が誤って追加されました.しかし、GlobalExceptionHandlerはコントローラの例外を発見した.理由は何ですか.
@ControllerAdvice
と@RestController
は何ですか?@RestControllerAdvice
= @RestController
+ @Controller
@ResponseBody
= @RestControllerAdvice
+ @ControllerAdvice
@ResponseBody
および@RestController
は、@RestControllerAdvice
および@Controller
に@ControllerAdvice
が追加されただけである.// @RestController
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
// ...
}
// @RestControllerAdvice
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@ControllerAdvice
@ResponseBody
public @interface RestControllerAdvice {
// ...
}
したがって,互いに例外を排除することができる.ただし@ResponseBody
は@RestControllerAdvice
と同様に@RestController
もあり、JavaオブジェクトをJson/Xml形式に戻し、HTTP応答Bodyに入れることができる.では、
@ResponseBody
で発生した異常のみを受信@RestControllerAdvice
で受信できますか?もちろんあります.
@RestController
を使用する場合、@RestControllerAdvice
を設定すると、@RestControllerAdvice(annotations = RestController.class)
に異常が発生するだけです.@RestController
もそうです.参考資料
「Spring Boot」(Spring Boot)エラー処理:
Reference
この問題について(グローバル例外の処理), 我々は、より多くの情報をここで見つけました https://velog.io/@tigger/Spring에서-전역-예외-처리하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol