오늘은 exception 처리입니다!
제가 어떠한 원리로 exception 코드를 작성했는지는 이 곳을 참고해주세요!
exception 패키지 구조입니다!
예외처리를 전역적으로 적용시킬 것이기에 global 패키지를 생성하여 예외 처리를 구현하였습니다.
먼저, enum을 사용하여 에러코드를 커스텀하였습니다.
* CustomErrorCode
public enum CustomErrorCode {
NOT_LOTTO_RANGE_EXCEPTION(400, "로또 범위 아님."),
USER_NOT_FOUND_EXCEPTION(404, "유저 없음."),
MONEY_NOT_FOUNT_EXCEPTION(404, "돈 없음."),
LOTTO_NOT_FOUND_EXCEPTION(404, "로또 없음.");
private final int status;
private final String message;
CustomErrorCode(int status, String message) {
this.status = status;
this.message = message;
}
public String getMessage() {
return message;
}
public int getStatus() {
return status;
}
}
오류 번호와 메세지를 직접 커스텀 하기 위해 생성하였습니다!
다음은 위에서 커스텀한 오류 코드를 사용하기 위해 구현부를 만들었습니다.
*CustomException
public class CustomException extends RuntimeException {
private final CustomErrorCode customErrorCode;
public CustomException(CustomErrorCode customErrorCode) {
super(customErrorCode.getStatus() + ": " + customErrorCode.getMessage());
this.customErrorCode = customErrorCode;
}
public CustomErrorCode getCustomErrorCode() {
return customErrorCode;
}
}
RuntimeException을 상속받아서, CustomErrorCode 값을 넘겨줄 수 있도록 하였습니다.
마지막으로 핸들러입니다!
* GlobalExceptionHandler
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(CustomException.class)
public ResponseEntity<ErrorResponse> handleException(CustomException e){
CustomErrorCode customErrorCode = e.getCustomErrorCode();
ErrorResponse errorResponse = new ErrorResponse(customErrorCode.getStatus(), customErrorCode.getMessage());
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(errorResponse);
}
}
ErrorResponse(dto)를 통해 값을 보여줄 수 있도록 하였고, 잘못된 요청(BAD_REQUEST)을 보냈다는 상태도 같이 반환하도록 코드를 작성하였습니다.
이렇게, Exception 처리를 어떻게 했는지 설명해 보았습니다!
저의 경우,
1. 에러 코드를 커스텀하고
2. 커스텀한 에러 코드를 이용할 수 있는 구현부를 만들고
3. 마지막으로 핸들러를 적용시켰습니다!
'스프링 > 미션' 카테고리의 다른 글
[Spring] lotto - API 서버 구현(1) (0) | 2024.10.05 |
---|---|
[Spring] lotto - exception 적용 (0) | 2024.10.04 |
[Spring] lotto - 도메인 로직 구현 (0) | 2024.10.02 |
[Spring] lotto - 기능 구현 목록 작성에 대한 중요성 (1) | 2024.10.02 |
[Spring] lotto - 미션 소개와 기능 구현 목록 정리 (0) | 2024.10.01 |