반응형
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 오류로 변경해준다
참고
반응형
'프레임워크 > Spring Boot' 카테고리의 다른 글
[Spring Boot] 프로젝트 초기 설정하기 (Spring Boot, DB, Git) (0) | 2024.07.25 |
---|---|
[Spring Boot] 멀티 모듈 프로젝트에 BeanDefinitionOverrideException 에러 해결 (0) | 2024.06.19 |
[Spring Boot] 유효성 검사 with @Valid, @Validated (0) | 2024.05.17 |
[Spring] DO(Entity), DTO (0) | 2024.05.16 |
[Spring Boot] HttpMediaTypeNotAcceptableException 에러 해결 (0) | 2024.05.14 |