프레임워크/Spring & Spring boot
@ExceptionHandler 과 @ResponseStatus
GOMSHIKI
2024. 6. 23. 17:45
반응형
@ExceptionHandler
- 특정 예외가 발생했을 때 해당 예외를 처리하는 메서드를 정의하는데 사용
- @ControllerAdvice와 @RestControllerAdvice 클래스 내에 정의
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ResponseEntity<String> handleResourceNotFoundException(ResourceNotFoundException ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.NOT_FOUND);
}
@ExceptionHandler(Exception.class)
public ResponseEntity<String> handleGenericException(Exception ex) {
return new ResponseEntity<>(ex.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@ResponseStatus
- 특정 예외가 발생했을 때 HTTP 상태 코드를 설정하는데 사용
- 예외 클래스에 @ResponseStatus 어노테이션을 적용해 자동으로 지정된 상태 코드와 이유를 반환
@ResponseStatus(HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException(String message) {
super(message);
}
}
비교 테이블
@ExceptionHandler | @ResponseStatus | |
역할 | 예외 처리 로직을 커스터마이징 여러 예외 상황을 세밀히 제어 가능 |
예외 클래스에 선언하여 예외 발생 시 자동으로 특정 HTTP 상태 코드를 반환하는데 사용 |
우선순위 | @ResponseStatus 보다 우선 | - |
둘다 사용할 경우 주의사항
- RuntimeException extends 하고 @ReponseStatus 를 추가한 클래스를 정의
- @ExceptionHandler로 RuntimeException 예외 처리 로직 및 statusCode를 구현했을 경우
@ExceptionHandler에서 정의한 error코드가 우선 반환됨. 따라서 @ResponseStatus를 붙일 필요가 없음.
참고 사이트
https://www.baeldung.com/spring-response-status
이상 정리 끝.
반응형