일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 겜스고
- codestates 국비지원 1기 합격 후기
- 에이치엘비
- 자바
- 코드스테이츠 백엔드 후기
- Code States 백엔드 합격 후기
- CodeState 후기
- 코테 합격후기
- 해시
- 코드스테이츠 합격
- 보험금 지급거절
- 금융감독원
- 금감원 백내장 민원
- 코드스테이츠 부트캠프
- 코드스테이츠 부트캠프 합격 후기
- 코드스테이츠 백엔드 부트캠프 합격
- 금감원
- HLB
- Java
- Gamsgo
- 백내장
- Spring
- 금융감독원 민원신청
- 코드 스테이츠 백엔드 교육과정
- 메서드
- 코드스테이츠 합격 후기
- 백내장 다초점렌즈 삽입술
- 코드스테이츠 백엔드 교육과정
- 백준 알고리즘
- 백내장 금감원
Archives
- Today
- Total
개발하는 동그리
[Spring] Spring MVC - 예외 처리 본문
반응형
예외 종류
- 유효성 검증에서 발생하는 예외
- 서비스 계층의 비지니스 로직에서 던져지는 의도된 예외
- 애플리케이션 실행 중 발생하는 예외
Exceptional Handler ( Controller 레벨에서 예외처리 )
- @ExceptionalHandler 애너테이션을 사용
@ExceptionHandler
public ResponseEntity handleException(MethodArgumentNotValidException e) {
// (1)
final List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
// (2)
return new ResponseEntity<>(fieldErrors, HttpStatus.BAD_REQUEST);
- 유효성 검증 과정에서 내부로 던져진 MethodArgumentNotValidException을 handlExcption 메서드가 전달 받음
- 리턴값으로 e.getBindingResult().getFieldErrors() 를 통해 에러 정보를 확인 할 수 있다.
ErrorResponse 클래스
- 에러 정보만 클라이언트에 전달하기 위한 클래스
@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;
}
}
handleException 수정
@ExceptionHandler
public ResponseEntity handleException(MethodArgumentNotValidException e) {
// (1)
final List<FieldError> fieldErrors = e.getBindingResult().getFieldErrors();
// (2)
List<ErrorResponse.FieldError> errors =
fieldErrors.stream()
.map(error -> new ErrorResponse.FieldError(
error.getField(),
error.getRejectedValue(),
error.getDefaultMessage()))
.collect(Collectors.toList());
return new ResponseEntity<>(new ErrorResponse(errors), HttpStatus.BAD_REQUEST);
@RestControllerAdvice 이용한 예외처리
- 코드 중복 문제 개선
- 기존 Controller 클래스 내 @exceptionHandler 메서드를 모두 제거
- 공통 예외처리할 GlobalExceptionAdvice 클래스 생성 ( @RestControllerAdvice 추가 )
- GlobalExceptionAdvice 클래스에 제거한 @ExceptionHandelr 메서드 추가
Pass
체크 예외 / 언체크 예외
- 체크 예외
- 대표적인 예) ClassNotFountException : 예외를 잡아서 체크하고 복구 or 회피 구체적인 처리 진행
- 언체크 예외
- 대표적인 예) NullPointException, ArrayIndexOutBoundsException
- 코드를 잘못 입력해서 발생하는 오류는 대부분 runtimeException을 상속한 예외
- 자바나 스프링에서 runtimeException을 지원하지만 개발자가 직접 예외를 만들경우도 존재한다.
개발자의 의도적 예외
- 백엔드 서버와 외부 시스템의 연동에서 발생하는 에러
- 시스템 내부의 리소스가 부재한 경우
의도적 예외 방법
- throw 키워드를 이용해서 예외를 메서드 밖으로 던지면, 메서드를 호출한 지점으로 던져진다. 따라서 우리는 GlobalException Advice를 공통화 해 두었으므로, 해당 클래스에서 처리할 수 있다.
- enum ExceptionCode 정의
public enum ExceptionCode {
MEMBER_NOT_FOUND(404, "Member Not Found");
@Getter
private int status;
@Getter
private String message;
ExceptionCode(int status, String message) {
this.status = status;
this.message = message;
}
}
Pass
반응형
'IT 정보 > Spring' 카테고리의 다른 글
[스프링 부트와 JPA 활용] 2편 (0) | 2022.07.14 |
---|---|
[Spring] JUnit Test 기능 (18) | 2022.07.12 |
[Spring] Spring MVC - 서비스 계층 (18) | 2022.07.04 |
[Spring] Spring MVC - API 계층 (6) | 2022.07.04 |
[Spring] Spring MVC - 데이터 엑세스 계층(1) JDBC (15) | 2022.06.30 |