RequestPointcut.java

  1. package no.nav.data.common.web;

  2. import io.swagger.v3.oas.annotations.Operation;
  3. import lombok.extern.slf4j.Slf4j;
  4. import no.nav.data.common.nais.NaisEndpoints;
  5. import no.nav.data.common.validator.RequestElement;
  6. import org.aspectj.lang.JoinPoint;
  7. import org.aspectj.lang.annotation.Aspect;
  8. import org.aspectj.lang.annotation.Before;
  9. import org.aspectj.lang.reflect.MethodSignature;
  10. import org.springframework.stereotype.Component;
  11. import org.springframework.web.bind.annotation.PutMapping;

  12. import java.util.Collection;
  13. import java.util.stream.Stream;

  14. @Slf4j
  15. @Aspect
  16. @Component
  17. public class RequestPointcut {

  18.     @Before("execution(* no.nav.data.team..*Controller.*(..))")
  19.     public void beforeController(JoinPoint joinPoint) {
  20.         MethodSignature signature = (MethodSignature) joinPoint.getSignature();
  21.         if (
  22.                 signature.getMethod().getDeclaringClass().equals(NaisEndpoints.class) ||
  23.                         !signature.getMethod().isAnnotationPresent(Operation.class)
  24.         ) {
  25.             return;
  26.         }
  27.         log.debug("{} {}", signature.getDeclaringType().getSimpleName(), signature.getName());

  28.         boolean isPut = signature.getMethod().isAnnotationPresent(PutMapping.class);
  29.         Stream.of(joinPoint.getArgs())
  30.                 .flatMap(arg -> {
  31.                     if (arg instanceof RequestElement re) {
  32.                         return Stream.of(re);
  33.                     }
  34.                     if (arg instanceof Collection<?> c) {
  35.                         return c.stream().filter(a -> a instanceof RequestElement).map(a -> ((RequestElement) a));
  36.                     }
  37.                     return Stream.empty();
  38.                 })
  39.                 .forEach(req -> {
  40.                     log.trace("setting update");
  41.                     req.setUpdate(isPut);
  42.                 });
  43.     }

  44. }