뚜sh뚜sh

Spring 예외 처리 구현 본문

Framework/Spring

Spring 예외 처리 구현

뚜sh뚜sh 2024. 1. 31. 20:23

1. 사용자 정의 에러 응답 클래스 생성

import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public class ErrorResponse {
    private final int errorCode;
    private final String errorMessage;
}

 

2. @ControllerAdvice를 사용한 전역 예외 처리기 구현

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(DuplicateException.class)
    public ResponseEntity<ErrorResponse> handleDuplicateException(DuplicateException e) {
        ErrorResponse errorResponse = new ErrorResponse(HttpStatus.CONFLICT.value(), e.getMessage());
        return new ResponseEntity<>(errorResponse, HttpStatus.CONFLICT);
    }
}
  • '@ControllerAdvice' 어노테이션은 스프링이 예외를 처리하는 클래스임을 나타냄
  • '@ExceptionHandler(DuplicateException.class)'는 DuplicateException 타입의 예외를 처리함
  • 이 메서드는 예외가 발생했을 때 ErrorResponse 객체를 생성하고, 이를 ResponseEntity로 감싸서 클라이언트에 전달함

 

3. 사용자 정의 예외 생성

public class DuplicateException extends RuntimeException {
    public DuplicateException() {
        super();
    }

    public DuplicateException(String message) {
        super(message);
    }

    public DuplicateException(String message, Throwable cause) {
        super(message, cause);
    }

    public DuplicateException(Throwable cause) {
        super(cause);
    }

    protected DuplicateException(String message, Throwable cause, boolean enableSuppression,
                                 boolean writableStackTrace) {
        super(message, cause, enableSuppression, writableStackTrace);
    }
}
  • 이렇게 설정하면, 애플리케이션에서 'DuplicateException'이 발생할 경우, 'GlobalExceptionHandler'에서 정의한 메서드가 호출되어 클라이언트에게 일관된 에러 응답을 반환하게 됨
Comments