try catch
를 최대한 지양.try catch
로 에러를 삼키고 다음으로 진행하는 방식도 지양. 만약 사용할 것이면, 로그를 명확하게 제대로 남기자.try catch
를 사용하게 된다면, 로그를 제대로 남기던가 더 구체적인 Exception을 throw하자.미리 처리해서 피할 수 있는 부분은 처리를 먼저하자. ( try-catch 사용 지양. )
Exception이 발생가능한 부분은 명확하게 Exception Throw를 하자.
최상단에서 처리를 하게 될 때, 특정 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());
}
}