참고 URL :
https://mangkyu.tistory.com/204
DefaultErrorAttributes: 에러 속성을 저장하며 직접 예외를 처리하지는 않는다.
DefaultHandlerExceptionResolver: 스프링의 예외들을 처리한다.
ResponseStatusExceptionResolver: @ResponseStatus 또는 ResponseStatusException에 의한 예외를 처리한다.
ExceptionHandlerExceptionResolver: Controller나 ControllerAdvice에 있는 ExceptionHandler에 의한 예외를 처리한다.
어노테이션 이름에서 예측가능하듯이 @ResponseStatus는 에러 HTTP 상태를 변경하도록 도와주는 어노테이션이다.
@ResponseStatus는 다음과 같은 경우들에 적용할 수 있다.
- Exception 클래스 자체
- 메소드에 @ExceptionHandler와 함께
- 클래스에 @RestControllerAdvice와 함께
단점
-에러 응답의 내용(Payload)를 수정할 수 없음
-예외 상황마다 예외 클래스를 추가해야 됨
-예와 클래스와 강하게 결합되어 모든 예외에 대해 동일한 상태와 에러 메세지를 반환하게 됨
소스코드
=================================================================================================================
@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class NoSuchElementFoundException extends RuntimeException {
...
}
=================================================================================================================
Return 값
=================================================================================================================
{
"timestamp": "2021-12-31T03:35:44.675+00:00",
"status": 404,
"error": "Not Found",
"path": "/product/5000"
}
=================================================================================================================
@ExceptionHandler는 매우 유연하게 에러를 처리할 수 있는 방법을 제공하는 기능이다.
@ExceptionHandler는 다음의 경우들에 어노테이션을 추가함으로써 에러를 손쉽게 처리할 수 있다.
- 컨트롤러의 메소드
- @ControllerAdvice나 @RestControllerAdvice가 있는 클래스의 메소드