Time does not change us. It just unfolds us.

Web/Else

[Web]@ContollerAdvice, @ExceptionHandler 예외처리

소젬 2021. 10. 22. 16:32

@RestController public class MyRestController { 
	...
	@ExceptionHandler(NullPointerException.class) 
    public Object nullex(Exception e) { 
    	System.err.println(e.getClass()); 
        return "myService"; 
    } 
}

@ExceptionHandler같은 경우는 @Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다. 즉, 메소드 위에 선언되며, 등록한 예외를 Catch하여 처리할 수 있다.

위 예제와 같이 @ExceptionHandler라는 어노테이션을 쓰고 인자로 캐치하고 싶은 예외클래스를 등록하여 사용한다.

주의사항/알아 둘 것

  • Controller, RestController에만 적용가능하다. (@Service같은 빈에서는 안됨.)
  • 리턴 타입은 자유롭게 해도 된다. (Controller내부에 있는 메서드들은 여러 타입의 response를 할 것이다. 해당 타입과 전혀다른 리턴 타입이어도 상관없다.)
  • @ExceptionHandler를 등록한 Controller에만 적용된다. 다른 Controller에서 NullPointerException이 발생하더라도 예외를 처리할 수 없다.
  • 메서드의 파라미터로 Exception을 받아왔는데 이것 또한 자유롭게 받아와도 된다.

 


@ExceptionHandler가 하나의 클래스에 대한 것이라면, @ControllerAdvice는 모든 @Controller에서 발생할 수 있는 예외를 잡아 처리해주는 annotation이다. 즉 예외를 한 곳에서 관리하게 도와준다.
새로운 클래스파일을 만들어서 annotation을 붙이기만 하면 된다. 그 다음에 @ExceptionHandler로 처리하고 싶은 예외를 잡아 처리하면 된다.

@RestControllerAdvice 
public class MyAdvice { 
	@ExceptionHandler(CustomException.class)
    public String custom() { 
    	return "hello custom"; 
    } 
}

 

참고 블로그

https://jeong-pro.tistory.com/195

 

@ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리, 통합하기(Spring에서 예외 관리하는 방법, 실

예외 처리 과정 프로그래밍에서 예외 처리는 아주 중요하면서도 아주 어렵다. 과하다할 만큼 상세하고 다양하게 예외를 잡아 처리해준다면, 클라이언트도 그렇고 서버도 그렇고 더 안정적인 프

jeong-pro.tistory.com

https://abbo.tistory.com/115

 

ControllerAdvice 어노테이션과 사용법

reference: jeong-pro.tistory.com/195 @ControllerAdvice, @ExceptionHandler를 이용한 예외처리 분리, 통합하기(Spring에서 예외 관리하는 방법, 실 예외 처리 과정 프로그래밍에서 예외 처리는 아주 중요하면..

abbo.tistory.com

 

'Web > Else' 카테고리의 다른 글

[Web]Url 주소 가져오기  (0) 2021.10.25
[Web]사용자 정의 예외 클래스  (0) 2021.10.25
[Web]WAS  (0) 2021.10.22
[Web]RESTful  (0) 2021.10.22
[Web]MSA  (0) 2021.10.22