위에서 설명했듯이 예외발생시 기본적으로 try-catch문으로 예외처리를 해야하지만 springFramework의 경우
@ExceptionHandler
어노테이션을 사용하면 예외를 전역적으로 처리 할 수 있고 ,
컨트롤러 내의 다른 메서드에서 발생하는 CustomException을 @ExceptionHandler을 이용한 메서드가 예외처리를 함으로 try-catch문을 사용할 필요가 없어진다.
CustomException.class
public class CustomException을 extends Exception {
public CustomException을() {
}
public CustomException을(String message) {
super(message);
}
public CustomException을(Exception e) {
super(e);
}
}
ControllerExceptionHandler.class
@ControllerAdvice
public class ControllerExceptionHandler {
private static final Logger logger = LoggerFactory.getLogger(ControllerExceptionHandler.class);
@SuppressWarnings("unchecked")
@ExceptionHandler({RimsException.class})
@ResponseStatus(HttpStatus.BAD_REQUEST)
protected ResponseEntity handleApiException(CustomException customException) {
return new ResponseEntity(new ErrorDTO(
customException.getExceptionStatus().getStatusCode(),
customException.getExceptionStatus().getMessage()),
HttpStatus.valueOf(customException.getExceptionStatus().getStatusCode()));
}
@ExceptionHandler({RuntimeException.class})
protected ResponseEntity<String> handleEtcException(CustomException e) {
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
}
}