@ExceptionHandler
2020. 4. 26. 16:55ㆍJava/Spring
728x90
1. @ExceptionHandler
@ExceptionHandler는 @Controller, @RestController가 적용된 빈에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 합니다.
@RestController
public class MyRestController {
@ExceptionHandler(NullPointerException.class)
public Object nullex(Exception e) {
System.err.println(e.getClass()); return "myService";
}
}
위와 같이 @ExceptionHandler를 쓰고 캐치하고 싶은 예외 클래스를 인자로 등록해주면 사용할 수 있습니다. 예제와 같이 사용한다면 MyRestController에 해당하는 빈에서 NullPointerException이 발생하면 @ExceptionHandler가 적용된 메서드가 호출될 것입니다.
주의사항
- @Controller, @RestController에만 적용할 수 있습니다. (@Service, @Component는 안 됨)
- 리턴 타입은 자유롭게 설정할 수 있습니다. 에러가 발생할 수 있는 메소드와 다른 리턴 타입이어도 상관없습니다.
- @ExceptionHandler를 등록한 Controller에만 적용됩니다.
- 메소드의 파라미터 또한 자유롭게 설정할 수 있습니다.
- @ResponseStatus를 이용해 HTTP 상태코드를 리턴하지 않으면, HTTP 상태 코드를 모두 200으로 리턴합니다.
2. @ControllerAdvice
@ControllerAdvice는 @Controller로 등록된 빈에서 발생한 모든 Exception을 처리해주는 기능을 합니다.
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NullPointerException.class)
public Object nullex(Exception e) {
System.err.println(e.getClass());
}
}
위의 예제처럼 쓴다면 어느 Controller에서 NullPointerException이 발생하면 예제에 선언된 메소드에서 처리됩니다.
3. @RestControllerAdvice
@RestControllerAdvice는 @RestController로 등록된 빈에서 발생한 모든 Exception을 처리해주는 기능을 합니다.
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(NullPointerException.class)
public Object nullex(Exception e) {
System.err.println(e.getClass());
}
}
위의 예제처럼 쓴다면 어느 RestController에서 NullPointerException이 발생하면 예제에 선언된 메소드에서 처리됩니다.
728x90
'Java > Spring' 카테고리의 다른 글
Transaction Template (1) | 2020.05.07 |
---|---|
Spring Singleton (0) | 2020.05.01 |
AOP (0) | 2020.04.18 |
@Transactional (0) | 2020.04.17 |
Spring DI 방법 (0) | 2020.03.27 |