@ExceptionHandler
: Controller 계층에서 발생하는 예외를 지정하고 핸들링할 수 있도록 해주는 Annotation
ex)
public class LoginException extends RuntimeException {
private final ClientErrorCode errorCode;
}
ClientErrorCode
: Error Status Code, Error Message 를 만들어 놓은 enum
(custom)
private final HttpStatus statusCode;
private final String msg;
@ExceptionHandler(LoginException.class)
public ResponseEntity<?> loginExceptionHandler(LoginException e) {
return ResponseEntity
.status(e.getErrorCode().getStatusCode())
.body(new ErrorResponse(e.getErrorCode().getMsg()));
}
@RestControllerAdvice
: 스프링 부트 애플리케이션에서 전역적으로 예외를 핸들링할 수 있도록 해주는 Annotation
@RestControllerAdvice
@Slf4j(topic = "error")
public class CustomExceptionHandler {
@ExceptionHandler(LoginException.class)
public ResponseEntity<?> loginExceptionHandler(LoginException e) {
return ResponseEntity
.status(e.getErrorCode().getStatusCode())
.body(new ErrorResponse(e.getErrorCode().getMsg()));
}
@ExceptionHandler(S3Exception.class)
public ResponseEntity<?> s3ExceptionHandler(S3Exception e) {
return ResponseEntity
.status(e.getErrorCode().getStatusCode())
.body(new ErrorResponse(e.getErrorCode().getMsg()));
}
...
}
여러 커스텀 예외를 만들어서 핸들링할 수 있다.