[Spring] ControllerAdvice, RestControllerAdvice

이병수·2024년 2월 2일
0

스프링 정리

목록 보기
20/24
post-thumbnail
post-custom-banner

@ControllerAdvice,@ RestControllerAdvice


스프링은 전역적으로 @ExceptionHanlder를 적용할 수 있는 @ControllerAdvice,@ RestControllerAdvice 이 두개의 어노테이션을 제공한다.

@RestControllerAdvice는 응답을 JSON으로 내려주고 @ControllerAdvice는 기존의 Controller 와 같다고 생각하면 된다.

@RestControllerAdvice
public class GlobalExceptionHandler {
	
	@ExceptionHandler(IllegalArgumentException.class)
	protected ResponseEntity<ResponseDto<?>> handleIllegalException(IllegalArgumentException e) {
		return ResponseEntity.badRequest().body(new ResponseDto<>(HttpStatus.BAD_REQUEST, e.getMessage(), null));
	}
}

Controller 패키지 안의 클래스 단에서 발생하는 Exception의 예외처리를 GlobalExceptionHandler 클래스에서 모두 다 처리하게 끔 만들어주면 된다.

내가 설정한 예외처리에 대한 내용은 모두 IllegalArgumentException 예외클래스인데, 예외처리를 커스텀마이징하여 더 추가적으로 변경하여 다양한 예외처리를 만들어서 작성하면 될 듯 하다.


이러한 전역적으로 예외처리를 처리하는 어노테이션을 사용하면 좋은점이 있다.

원래라면 모든 메서드마다 try { } catch { } 문을 사용하여 하나하나 예외처리를 잡아주었다.
하지만 그럴 필요가 없다


  • 메서드에서는 그냥 예외처리에 대한 응답 결과를 throw 로 던저주면 GlobalExceptionHandler 클래스에서 모두 다 잡아준다.

  • 또한, 직접 정의한 에러 응답을 클라이언트에게 넘겨줄 수 있다.

  • 위에서 말했듯 try , catch 문이 없어지기 때문에 코드의 가독성이 증가해준다!

다만 이 어노테이션을 사용할 때 주의점이 있다.


  • 하나의 프로젝트 당 하나의 전역적인 예외처리 클래스로 관리하는 것이 좋다.

  • 직접 구현한 예외처리 클래스들은 한 공간에서 관리해야한다.

profile
백엔드 개발자가 되고 싶어요
post-custom-banner

0개의 댓글