[Spring] 예외 구성 및 예외 핸들링

김현진·2023년 5월 23일
0

커플 SNS 프로젝트

목록 보기
2/4

예외 구성

지난 번에 에러 코드를 추가하였는데, 해당 에러 코드를 포함하면서 내부에서 Custom 예외를 발생시킬 때 사용할 최상위 예외를 작성하였다.

@Getter
public class ApplicationException extends RuntimeException {

	@Serial
	private static final long serialVersionUID = -8808014635391651324L;

	private final ErrorCode errorCode;

	public ApplicationException(String message, ErrorCode errorCode) {
		super(message);
		this.errorCode = errorCode;
	}
}

이와 같이 구성한 이유는 다음과 같다.

  • 직접 발생시킬 예외들을 해당 형태로 강제하기 위해서
  • 예외를 핸들링 할 때 일관된 형태로 핸들링 하기 위해서
  • ErrorCode 필드
    • 이후에 예외를 핸들링 할 때 Http Status Code 및 Custom 에러 코드를 응답해 주기 위해 포함
  • message
    • 해당 예외를 설명하기 위해 포함

또한 예외 핸들링을 할 때, 특별히 다른 예외 처리를 해야 하는 경우는
하위 예외 클래스로 핸들링하면 되고, 일반적인 경우는 공통 처리를 해주면 된다!

// 일반적인 예외 핸들링
@ExceptionHandler(ApplicationException.class)
	public ResponseEntity<ApiResponse<Void>> handleApplicationException(ApplicationException e) {

		ErrorCode errorCode = e.getErrorCode();
		String message = e.getMessage();
		ApiResponse<Void> response = ApiResponse.ofFail(errorCode, message);

		return ResponseEntity.status(e.getErrorCode().getHttpStatusCode()).body(response);
	}
    
// 기존과 다른 예외 핸들링
// MemberNotFoundException 은 ApplicationException 의 하위 예외
@ExceptionHandler(MemberNotFoundException.class)
	public ResponseEntity<ApiResponse<Void>> handleApplicationException(ApplicationException e) {

		// 기존과 다른 처리...
	}

0개의 댓글