본문 바로가기

STUDY/Spring

Spring Boot | Exception만들기

1. CustomException 부모 클래스 생성

RuntimeException을 상속받아 작성한다.

ErrorCode를 입력받는 생성자를 생성, super(errorCode.getMessage())는 아래와 같이 exception발생 시 메시지를 설정한다.

public class CustomException extends RuntimeException implements Serializable {

    private ErrorCode errorCode;

    public CustomException(ErrorCode errorCode) {
        super(errorCode.getMessage());
        this.errorCode = errorCode;
    }

    public ErrorCode getErrorCode() {
        return errorCode;
    }
}

❗️ErrorCode

@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum ErrorCode {

    OVER_FILE_SIZE(400, "804", "파일 사이즈는 320*240 이하여야만 합니다."),
    INTERNAL_SERVER_ERROR(500, "500", "서버 에러");

    private int status;
    private final String code;
    private final String message;

    ErrorCode(final int status, final String code, final String message) {
        this.status = status;
        this.code = code;
        this.message = message;
    }

    public int getStatus() {
        return status;
    }

    public String getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

 

2. CutomException을 상속받는 구체적인 Exception 생성

파일 업로드 시 발생하는 예외처리에 사용할 Exception이다.

public class FileStorageException extends CustomException implements Serializable {

    public FileStorageException(ErrorCode errorCode) {
        super(errorCode);
    }

}

 

3. @ControllerAdvice(@RestConrollerAdvice)에서 핸들링

@ExceptionHandler(CustomException.class)
protected ResponseEntity<?> handleCustomException(CustomException e) {
  log.error("CustomException", e);
  ErrorCode errorCode = e.getErrorCode();
  final ErrorResponse response = ErrorResponse.of(errorCode);
  return new ResponseEntity<>(response, HttpStatus.resolve(errorCode.getStatus()));
}