[Spring Boot] 오류처리 종류

Posted by 김성철

SpringBoot - 오류처리의 종류

참고 URL :  
	https://mangkyu.tistory.com/204  

HandlerExceptionResolver 의 기본적인 4가지 구현체

DefaultErrorAttributes: 에러 속성을 저장하며 직접 예외를 처리하지는 않는다.  
  
DefaultHandlerExceptionResolver: 스프링의 예외들을 처리한다.  
  
ResponseStatusExceptionResolver: @ResponseStatus 또는 ResponseStatusException에 의한 예외를 처리한다.  
  
ExceptionHandlerExceptionResolver: Controller나 ControllerAdvice에 있는 ExceptionHandler에 의한 예외를 처리한다.  

@ResponseStatus

어노테이션 이름에서 예측가능하듯이 @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는 매우 유연하게 에러를 처리할 수 있는 방법을 제공하는 기능이다.  
@ExceptionHandler는 다음의 경우들에 어노테이션을 추가함으로써 에러를 손쉽게 처리할 수 있다.  
  
	- 컨트롤러의 메소드  
	- @ControllerAdvice나 @RestControllerAdvice가 있는 클래스의 메소드  

ControllerAdvice, RestControllerAdvice

ResponseStatusException