티스토리 뷰

프로젝트를 진행하던 중에 예외에 따라 응답값을 다르게 내려줘야 하는 상황이 생겼다.

기존에는 예외처리가 필요한 코드를 try-catch 문을 통해 일일히 처리했지만 @ControllerAdvice 를 이용하면 더 깔끔하게 예외를 처리할 수 있다고 한다.

ControllerAdvice란?

@Controller 혹은 @RestController 에서 발생한 예외를 한 곳에서 처리할 수 있도록 도와준다. 일반적인 API서버는 컨트롤러에서 Service 객체를 통해 비즈니스 로직을 처리하게 된다. 그리고 만약 비즈니스 로직 수행 중 예외가 발생할 경우 컨트롤러 단 까지 예외가 넘어오게 된다.

@ControllerAdvice 는 이렇게 컨트롤러 단에서 발생한 예외들을 한 곳에서 처리할 수 있도록 도와준다.
이걸 사용하면 컨트롤러 코드에 try-catch 등의 코드가 더 이상 보이지 않게 된다.

사용방법

ExceptionController 를 만들었다.

@ControllerAdvice
public class ExceptionController {

  @ExceptionHandler({
      NotFoundGameRoomException.class,
      DuplicateUserNicknameException.class,
  })
  public ResponseEntity<Object> RuntimeException(final RuntimeException ex) {
    //예외처리

    return new ResponseEntity<>(ex.getMessage(), HttpStatus.BAD_REQUEST);
  }
}

이후 클래스 위에 @ControllerAdvice 를 붙이자.
그 다음 @ExceptionHandler 에서 처리하고자 하는 예외의 클래스를 작성하면 된다.
만약 해당 예외가 발생하면 저 메소드가 실행되게 된다.

파라미터로 예외를 받을 수 있으므로, 예외에 있는 다양한 정보들을 이용할 수 있다.

메소드 내부에서는 예외에 따라 처리할 로직을 작성후 반한해주면 그 응답이 서버로 request를 보낸 클라이언트에게 전달된다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함