쉽게 말하자면 컨트롤러 계층에서 AOP를 적용시키기 위한 어노테이션이라고 할수 있을것 같다.
해당 어노테이션을 주로 사용하는 예시에는 예외처리에 대한 코드가 대부분 있다.
컨트롤러단 메서드들의 코드들을 좀 더 단순화 시키고 가독성이 좋게 하기 위한 목적으로 쓰이는 편이다.
이 어노테이션과 비슷한 어노테이션이 하나 존재한다 -> @RestControllerAdvice
보면 눈치 채셨겠지만 차이점은 Rest한 메서드들에 적용시킬지 아닐지에 대한 것 뿐이다.
우선 2가지 정도의 예외를 직접 간단히 만들어보았습니다..
public class NotEnoughStockException extends RuntimeException {
public NotEnoughStockException() {
super("해당 상품의 재고가 부족합니다.");
}
}
public class IsNotCartException extends RuntimeException {
public IsNotCartException() {
super("장바구니가 없습니다.");
}
}
예외처리 메서드
@ControllerAdvice
public class ExceptionController {
// 복수개의 에러잡기
@ExceptionHandler(value = {NotEnoughStockException.class, IsNotCartException.class})
public String exceptionHandler(RuntimeException e) {
return e.getMessage();
}
// 하나의 에러잡기
// @ExceptionHandler
// public String notEnoughStockExceptionHandler(NotEnoughStockException e) {
// return e.getMessage();
// }
}
@ControllerAdvice를 선언하고 예외처리를 할 메서드에 @ExceptionHandler를 선언해서 사용합니다.
위처럼 여러개의 예외처리를 한꺼번에 하고싶을 경우 @ExceptionHandler의 매개변수로 value의 값에
예외처리할 클래스를 지정하시면 되겠습니다.
그게 아니라면 예외처리 메서드의 매개변수에 예외처리할 클래스를 넣고 해당 메세지를 리턴하면 되겠습니다.
이런식으로 한다면 직접적으로 Controller단 로직안에 try - catch문을 넣을 이유가 사라집니다.
'Back-End > Spring' 카테고리의 다른 글
Spring Boot Test Code 동작순서 정렬 - @TestMethodOrder (0) | 2021.06.25 |
---|---|
Validator 인터페이스 사용 (0) | 2021.05.20 |
@QueryProjection 으로 Querydsl 작성 (1) | 2021.05.11 |
JPA) @Entitygraph (0) | 2021.05.07 |
Spring Data JPA 와 Postgresql 연동 (0) | 2021.04.21 |