필수 입력 데이터 미입력시에 대한 예외 처리 - tjdwns4537/mybatis-practice GitHub Wiki

RestControllerAdvice, ExceptionHandler

LoginErrorCode에 대한 enum class 생성

  • 공통된 에러 타입을 응답할 수 있게 해주기 위함
public enum LoginErrorCode {
    DataIntegrityViolationException(400, HttpStatus.BAD_REQUEST,"you should input data");

    private int code;
    private HttpStatus httpStatus;
    private String description;

    private LoginErrorCode(int code, HttpStatus httpStatus, String description) {
        this.code = code;
        this.httpStatus = httpStatus;
        this.description = description;
    }

    public int getCode() {
        return code;
    }

    public HttpStatus getHttpStatus() {
        return httpStatus;
    }

    public String getDescription() {
        return description;
    }
}

LoginAdvice

  • RestControllerAdvice(패키지명) 을 통해서 특정 패키지에서 발생하는 컨트롤러 예외를 캐치
  • ExceptionHandler를 통해 예외 처리 메소드 작성
@RestControllerAdvice("kia.com.mybatistest.member.controller")
public class LoginAdvice {

    @ExceptionHandler(DataIntegrityViolationException.class)
    public ResponseEntity<LoginResponse> emptyDataError() {
        LoginResponse loginResponse = LoginResponse.builder()
                .code(LoginErrorCode.DataIntegrityViolationException.getCode())
                .httpStatus(LoginErrorCode.DataIntegrityViolationException.getHttpStatus())
                .message(LoginErrorCode.DataIntegrityViolationException.getDescription()).build();

        return new ResponseEntity<>(loginResponse, loginResponse.getHttpStatus());
    }
}

LoginResponse

  • 응답 메세지 처리를 위한 공통된 클래스 생성
  • 동적인 처리를 위해 빌더 패턴 적용
@Getter
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class LoginResponse {
    private int code;
    private HttpStatus httpStatus;
    private String message;
}