프레임워크/Spring Boot

[Spring Boot] ExceptionResolver으로 예외 처리하기

김꿍디꿍디 2024. 5. 21. 08:25
반응형

1. ExceptionHandlerExceptionResolver

예외가 나면 자동으로 호출되어 예외를 처리할 수 있다.

    // 유효성 검사하다가 에러가 터지면 호출되는 예외 처리 메서드
    @ExceptionHandler//(MethodArgumentNotValidException.class)
    public ApiUtils.ApiResult<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException errors) {
        Map<String, String> errorMessages = new HashMap<>();
        for (FieldError error : errors.getFieldErrors()) {
            String errorField = error.getField();
            String errorMessage = error.getDefaultMessage();
            errorMessages.put(errorField, errorMessage);
        }
        return error(errorMessages, HttpStatus.BAD_REQUEST);
    }

전역 예외 처리 

@RestControllerAdvice(혹은 @ControllerAdvice)와 함께 사용하여

모든 컨트롤러에서 전역으로 예외를 처리할 수 있는 클래스를 만들 수 있다.

@RestControllerAdvice
public class GlobalExceptionHandler {

    // 유효성 검사하다가 에러가 터지면 호출되는 예외 처리 메서드
    @ExceptionHandler//(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ApiUtils.ApiResult<Map<String, String>> handleValidationExceptions(MethodArgumentNotValidException errors) {
    	...
    }
}

2. ResponseStatusExceptionResolver

 

상태 코드를 적용하여 예외를 처리할 수 있다.

@ResponseStatus(HttpStatus.BAD_REQUEST)

3. DefaultHandlerExceptionResolver

스프링 내부적으로 기본 예외 처리

 

ex. JSON → DTO 타입이 안맞아서  TypeMismatchException 가 발생하는 경우

 

해당 예외가 서블릿 컨테이너까지 예외가 올라가고, 결과적으로 500 오류가 발생한다.
그런데 파라미터 바인딩은 대부분 클라이언트가 HTTP 요청 정보를 잘못 호출해서 발생하는 문제라 HTTP 상태 코드를 400으로 변경해야 하한다.

이 때 DefaultHandlerExceptionResolver가 500 오류가 아닌 HTTP 상태 코드 400 오류로 변경해준다

참고

https://jddng.tistory.com/279

 

String MVC - API 예외처리(ExceptionHandlerExceptionResolver, ResponseStatusExceptionResolver, DeFaultHandlerExceptionResolve

ResponseStatusExceptionResolver DefaultHandlerExceptionResolver ExceptionHandlerExceptionResolver @ControllerAdvice, @RestControllerAdvice API 예외처리 스프링 부트가 기본으로 제공하는 ExceptionResolver는 다음과 같다. ExceptionResolv

jddng.tistory.com

 

https://zayson.tistory.com/entry/RestControllerAdvice-ExceptionHandler%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%A0%84%EC%97%AD-%EC%98%88%EC%99%B8-%EC%B2%98%EB%A6%AC#%25--RestControllerAdvice%25-C%25--%25--ExceptionHandler%EB%25A-%BC%25--%EC%25-D%25B-%EC%25-A%25A-%ED%25--%25-C%25--%EC%25A-%25--%EC%25--%AD%25--%EC%25--%25--%EC%25--%25B-%25--%EC%25B-%25--%EB%25A-%AC

 

RestControllerAdvice, ExceptionHandler를 이용한 전역 예외 처리

이전 포스팅에서 프로젝트 애플리케이션이 동작 시 발생하는 다양한 상황에 대해서 메세지를 클라이언트로 전달해주기 위해 Custom Exception을 이용한 사용자 예외 처리를 다뤘다. 이렇게 Custom Exce

zayson.tistory.com

 

반응형