ExceptionHandler로 비즈니스 에러처리
import lombok.Getter;
@Getter
public enum ErrorCode {
ERROR_SUCCESS(200, "success")
, ERROR_USER(401,"this email is already in use")
....(생략)
private final int code;
private final String msg;
ErrorCode(int code, String msg){
this.code = code;
this.msg = msg;
}
}
- RuntimeException 을 상속받는 클래스를 생성해준다
@Getter
public class ApiException extends RuntimeException {
private final ErrorCode errorCode;
ApiException(ErrorCode errorCode){
this.errorCode = errorCode;
}
}
- RuntimeException
- 실행중에 발생하는 에러이며 시스템환경적으로나 인풋값이 잘못된 경우나 프로그래머가 의도적으로 에러를 발생시킬 조건에 부합할 때 발생
- @ExceptionHandler 어노테이션 활용한 ApiExceptionHandler 생성
- value 값으로 어떤 exception을 줄지 정함
- 내가 보내주고 싶은 정보만 담아서 보낼 수 있음
@RestControllerAdvice
public class ApiExceptionHandler {
@ExceptionHandler({ApiException.class})
public ResponseEntity handleException(ApiException ex){
Map<String, String> errors = new HashMap<>();
errors.put("error_user_msg", ex.getErrorCode().name());
errors.put("error_code", ex.getErrorCode().getErrorCode()+"");
return ResponseEntity.badRequest().body(errors);
}
}
- 클래스를 따로 만들어서 new 로 객체로 보낼수도 있는데 본인은 이런방식이 더 편해서 map 에 담아 보냄
- 에러처리를 주고 싶은곳에 아래처럼 에러를 날리면됨
if (user == null)
throw new ApiException(ErrorCode.ERROR_USER);
{
"error_code": "410",
"error_user_msg": "ERROR_USER_PASSWORD"
}