티스토리 뷰

@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

 

 

이상 정리 끝.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함