본문 바로가기
IT/Java

@ExceptionHandler 와 @ControllerAdvice 예외 처리하기

by 성준하이 2023. 9. 19.
반응형

Java에서 기본적으로 예외 처리라고 하면 try catch 를 사용하곤 한다.

자세한 내용은 아래 참고 포스팅에서 참고 바란다.

 

이번 포스팅에서 다룰 내용은 ExceptionHandler 와 ControllerAdvice 를 사용하여 예외처리 이다.

기존 예외 처리와의 차이점은

try catch 는 비지니스 로직에 녹여 내리는게 대부분이고

오늘 다룰 2가지는 Controller 단에서 사용된다.

 

@ExceptionHandler

@ExceptionHandler 는 @Controller, @RestController가 적용된 Bean내에서 발생하는 예외를 잡아서 하나의 메서드에서 처리해주는 기능을 한다.

@RestController
@RequiredArgsConstructor
public class ExceptionTestController {

    @PostMapping("/exceptiontest")
    public String justApi(@RequestBody TestInDto inDto) {
        throw new NullPointerException();
    }
    @ExceptionHandler(NullPointerException.class)
    public Object nullex(Exception e) {
        System.out.println("Test");
        return "myService";
    }

}

위 코드처럼 특정 class 안에 구현을 한다.

그리고 지정한 Exception이 터지면 ExceptionHandler가 동작을 하게 된다.

 

ExceptionHandler 는 Controller 내에서만 사용가능할 뿐더러 지정한 클래스에서만 사용이 가능하다.

 

모든 Controller 들 중에서 어떤 에러가 나더라도 모두 작동하게 하려면 그때 ContollerAdvice를 사용하면 된다.

 

별도의 클래스를 하나 더만들고,

@ControllerAdvice
public class CustomExceptionHandler {

    @ExceptionHandler(Exception.class)
    public void  handleAll(Exception ex){

        System.out.println("TEST");
        System.out.println(ex.toString());
    }
}

이렇게 구현을 해주면 어느 Controller 에서 터지더라도 이 메서드가 호출된다.

하지만 ExceptionHandler가 선언이 되어있는 클래스는 해당 클래스 내에 ExcepionHandler를 타게 되니

필요에 따라 구현을 하면 되겠다.


참고 포스팅

https://thenicesj.tistory.com/151

 

try - catch - finally 예외처리란?

한가지 예로 외출을 해야하는 경우인데 친구들끼리 오늘은 각자 준비해서 검정색 신발을 신고 만나자! 라고 얘기가 되었다. 근데 다들 모였는데 한 친구만 안나오길래 그 집에 가보니 친구가 신

thenicesj.tistory.com

 

반응형

'IT > Java' 카테고리의 다른 글

@Resource 관련  (58) 2023.09.22
[Java] Iterator  (62) 2023.09.21
[JPA] @OneToMany , @ManyToOne  (61) 2023.09.18
파일읽기 쓰기 (FileInputStream, FileOutputStream)  (37) 2023.09.16
.gz 파일 압축 풀기 (GZIPInputStream, GZIPOutputStream)  (51) 2023.09.15

댓글