-
[Spring Boot] AOP pointcut post, put 어노테이션에 적용하기 (pointcut 여러개)SpringBoot Meteor 2021. 12. 29. 16:30
@Component @Aspect public class ValidationAdvice { @Pointcut("@annotation(org.springframework.web.bind.annotation.PostMapping)") public void postMapping(){} @Pointcut("@annotation(org.springframework.web.bind.annotation.PutMapping)") public void putMapping(){} @Before("postMapping() || putMapping()") public void apiAdvice(JoinPoint joinPoint){ Object[] args = joinPoint.getArgs(); for (Object arg: args) { if (arg instanceof BindingResult){ BindingResult bindingResult = (BindingResult) arg; if (bindingResult.hasErrors()){ throw new CustomValidationApiException(bindingResult.getFieldError().getDefaultMessage()); } } } } }
위는 전체 코드
// postMapping에 해당하는 Pointcut 메서드를 만들어준다. @Pointcut("@annotation(org.springframework.web.bind.annotation.PostMapping)") public void postMapping(){} // PutMapping에 해당하는 Pointcut 메서드를 만들어준다. @Pointcut("@annotation(org.springframework.web.bind.annotation.PutMapping)") public void putMapping(){} // postMapping()메서드, putMapping()메서드 호출되기전에 apiAdice()메서드가 호출된다 (AOP) @Before("postMapping() || putMapping()") public void apiAdvice(JoinPoint joinPoint){ Object[] args = joinPoint.getArgs(); for (Object arg: args) { if (arg instanceof BindingResult){ BindingResult bindingResult = (BindingResult) arg; if (bindingResult.hasErrors()){ throw new CustomValidationApiException(bindingResult.getFieldError().getDefaultMessage()); } } } }
전체적인 순서로 보면
- postMapping or putMapping 발생 → postMapping() or putMapping() <포인트컷> 실행 butPointCut을 메서드로 등록하여 그 메서드에 어드바이스를 걸어주었음
- advice메서드에 @Before로 해당 메서드들이 걸려있으므로 → advice() 메서드가 실행됨
'SpringBoot Meteor' 카테고리의 다른 글
[Spring Boot] AOP JoinPoint & 바인드 변수 (0) 2021.12.29 [Spring Boot] AOP JoinPoint & 바인드 변수 (0) 2021.12.29 [Spring Boot] Objects.requireNonNull 메서드 (0) 2021.12.29 [Spring Boot] @RestControllerAdvice를 이용해서 예외 처리 핸들링하기 (0) 2021.12.29 [Spring Boot] JWT (JSON WEB TOKEN) 간단 정리 (0) 2021.12.23