[Spring] Exception 처리하기
Try Catch
try catch
를 최대한 지양.try catch
로 에러를 삼키고 다음으로 진행하는 방식도 지양. 만약 사용할 것이면, 로그를 명확하게 제대로 남기자.try catch
를 사용하게 된다면, 로그를 제대로 남기던가 더 구체적인 Exception을 throw하자.
Exception
-
미리 처리해서 피할 수 있는 부분은 처리를 먼저하자. ( try-catch 사용 지양. )
- 그래도 try-catch를 사용해야한다면, 2와 같이 명확한 Exception을 throw해서 Advice가 처리하도록 하자.
-
Exception이 발생가능한 부분은 명확하게 Exception Throw를 하자.
- Custom한 Exception 클래스 사용하기.
- Custom Exception을 통해 로그를 정확하고, 의미있게 남기자.
- Client에게 Exception의 클래스에 따라 더욱 명확하고 구분 가능한 Response를 주자.
- Global level로 최상단에서 Exception에 따라 처리하자. ( 2와 결국 내용은 같다. )
- Custom한 Exception 클래스 사용하기.
-
최상단에서 처리를 하게 될 때, 특정 Exception들은 RestControllerAdvice를 이용한 Handler로 처리
@ControllerAdvice
는 프로젝트 전역에서 발생하는 모든 예외를 잡아줌.@ExceptionHandler
는 발생한 특정 예외를 잡아서 하나의 메소드에서 공통 처리 가능.
따라서 둘을 같이 사용하면 모든 예외를 잡은 후에 Exception 종류별로 메소드를 공통 처리가 가능해진다.
예시 코드.
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
@ExceptionHandler(value = { ConstraintViolationException.class, DataIntegrityViolationException.class})
protected ResponseEntity<ErrorResponse> handleDataException() {
log.error("handleDataException throw Exception : {}", DUPLICATE_RESOURCE);
return ErrorResponse.toResponseEntity(DUPLICATE_RESOURCE);
}
@ExceptionHandler(value = { CustomException.class })
protected ResponseEntity<ErrorResponse> handleCustomException(CustomException e) {
log.error("handleCustomException throw CustomException : {}", e.getErrorCode());
return ErrorResponse.toResponseEntity(e.getErrorCode());
}
}
Author And Source
이 문제에 관하여([Spring] Exception 처리하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kshired/java-Exception-처리하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)