개발/Spring Boot MVC

@ExceptionHandler를 이용한 예외 처리

더덕2 2023. 8. 28. 15:56

예외 처리를 하는 이유

클라이언트와 서버간 통신을 하다보면 요청값이 틀리거나 잘못된 정보를 요청할시 에러가 뜨게되는데

그 에러를 예외처리 해줌으로써 더욱 더 명확히 에러가 왜 발생되었는지를 클라이언트에게 알려줄 수 있다.

 

@ExceptionHandler

사용해 Controller에 메서드를 만들게 되면 유효성 검증과정에서 내부적으로 던져진 MethodArgumentNotValidException

@ExceptionHandler를 사용한 메서드를 통해 들어오게 됩니다.

MethodArgumentNotValidException 객체에서 getBindingResult().getFieldErrors()통해 발생한 에러정보를 확인할 수 있습니다.

 

그렇기 때문에 필요한 정보만 넘겨주기 위해서

Error Response 클래스를 만들어 필요한 정보만 담아 클라이언트쪽에 보내주면 됩니다.

@Getter
@AllArgsConstructor
public class ErrorResponse {
    // (1)
    private List<FieldError> fieldErrors;

    @Getter
    @AllArgsConstructor
    public static class FieldError {
        private String field;
        private Object rejectedValue;
        private String reason;
    }
}

(1)

fieldErrors를 List로 받는 이유는 유효성 검증에 실패하는 변수가 하나 이상이 될 수있기 때문

 

List<ErrorResponse.FieldError> errors =
                fieldErrors.stream()
                            .map(error -> new ErrorResponse.FieldError(
                                error.getField(),
                                error.getRejectedValue(),
                                error.getDefaultMessage()))
                            .collect(Collectors.toList());

ErrorResponse 객체에 필요한 에러정보를 담기 위해 받은 에러를 stream을 통해서 넣어줄 수 있다.