예외 처리를 하는 이유
클라이언트와 서버간 통신을 하다보면 요청값이 틀리거나 잘못된 정보를 요청할시 에러가 뜨게되는데
그 에러를 예외처리 해줌으로써 더욱 더 명확히 에러가 왜 발생되었는지를 클라이언트에게 알려줄 수 있다.
@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을 통해서 넣어줄 수 있다.
'개발 > Spring Boot MVC' 카테고리의 다른 글
서비스로직에서 발생될 수 있는 예외처리 (1) | 2023.08.31 |
---|---|
MapStruct를 이용하여 Mapper 자동 생성 (1) | 2023.08.21 |
DI를 적용한 비즈니스 계층과 API 계층 연동 (0) | 2023.08.14 |
API계층 ←→ 서비스 계층 (0) | 2023.08.14 |
MVC패턴 계층 기반 패키지 구조 (0) | 2023.08.05 |