스프링부트 AOP 처리 컨트롤에서 작동처리
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
import java.util.HashMap; import java.util.Map; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import com.cos.photogramstart.handler.ex.CustomValidationApiException; @Component @Aspect public class ValidationAdvice { //Controller.*(..) 모든 메소드 @Around("execution(* com.cos.macaronics.web.api.*Controller.*(..))") public Object apiAdvice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("web api 컨트롤러 ====== "); //proceedingJoinPoint => profile 함수의 모든 곳에 접근할 수 있는 변수 //profile 함수보다 먼저 실행 Object[] args=proceedingJoinPoint.getArgs(); for(Object arg:args) { if(arg instanceof BindingResult) { System.out.println("유효성을 검사하는 함수"); BindingResult errors=(BindingResult)arg; if(errors.hasErrors()) { Map<String,String> errorMap=new HashMap<>(); for(FieldError error: errors.getFieldErrors()) { errorMap.put(error.getField(), error.getDefaultMessage()); } throw new CustomValidationApiException("유효성 검사 실패함", errorMap); } } } return proceedingJoinPoint.proceed(); // profile 함수가 실행됨. } @Around("execution(* com.cos.macaronics.web.*Controller.*(..))") public Object advice(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { System.out.println("web 컨트롤러 ====== "); return proceedingJoinPoint.proceed(); } }
컨트롤 예
/** * 댓글 삭제 */ @RequiredArgsConstructor @RestController @Log4j2 public class CommentApiController { private final CommentService commentService; /** * 댓글 등록 * @param commentDto * @param principalDetails * @return */ @PostMapping("/api/comment") public ResponseEntity<?> commentSave(@Valid @RequestBody CommentDto commentDto, BindingResult bindingResult, @AuthenticationPrincipal PrincipalDetails principalDetails){ commentDto.setUser(principalDetails.getUser()); CommentResDTO commentResDTO= commentService.댓글쓰기(commentDto); return ResponseEntity.ok().body(new CMRespDto<>(1,"댓글 등록 성공", commentResDTO)); }
소스 :
https://github.com/braverokmc79/EaszUp-Springboot-Photogram-Start
댓글 ( 4)
댓글 남기기