서버단에서 예외를 처리할 때, 일관성 있어야 하며 어떤 문제인지 직관적으로 알 수 있어야 한다고 생각한다. 해서 예외 핸들링 하는 기법에 대해 학습하고 기록하고자 한다.
예외가 발생하였을 때 응답할 데이터를 생각해보았다.
1. HTTP 상태 코드
2. 예외 메시지
3. 예외 코드 (규약으로 정해진)
우선 응답할 데이터를 반환해주는 메서드를 정의한 인터페이스를 생성한다.
HTTP 상태코드와 규약으로 정해진 코드 그리고 메시지를 반환하는 추상 메서드를 정의하였다.
그리고 해당 인터페이스를 구현한 Enum 클래스를 정의한다.
생성자의 매개변수로 코드와 메시지를 받고 있다.
status의 경우 HttpStatus.BAD_REQUEST.value();로 받고 있다.
그리고 @ControllerAdvice가 선언된 클래스에서 @ExceptionHadler를 통해 낚아챌 클래스이다.
RuntimeException을 상속받았으며, 생성자의 매개변수로는 ExplainableError 타입의 객체를 받고 있다. (자바의 다형성 이용)
@ControllerAdvice 어노테이션이 정의된 예외 핸들링 클래스이다.
@ExceptionHandler 어노테이션을 통해 CustomApiException 타입의 예외가 발생하면 낚아채서 ResponseEntity 객체로 응답하고 있다.
다음의 과정을 통해 여러가지 예외에 대해 일관성 있는 응답을 처리할 수 있게 되었다.