RequestPointcut.java
package no.nav.data.common.web;
import io.swagger.v3.oas.annotations.Operation;
import lombok.extern.slf4j.Slf4j;
import no.nav.data.common.nais.NaisEndpoints;
import no.nav.data.common.validator.RequestElement;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PutMapping;
import java.util.Collection;
import java.util.stream.Stream;
@Slf4j
@Aspect
@Component
public class RequestPointcut {
@Before("execution(* no.nav.data.team..*Controller.*(..))")
public void beforeController(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
if (
signature.getMethod().getDeclaringClass().equals(NaisEndpoints.class) ||
!signature.getMethod().isAnnotationPresent(Operation.class)
) {
return;
}
log.debug("{} {}", signature.getDeclaringType().getSimpleName(), signature.getName());
boolean isPut = signature.getMethod().isAnnotationPresent(PutMapping.class);
Stream.of(joinPoint.getArgs())
.flatMap(arg -> {
if (arg instanceof RequestElement re) {
return Stream.of(re);
}
if (arg instanceof Collection<?> c) {
return c.stream().filter(a -> a instanceof RequestElement).map(a -> ((RequestElement) a));
}
return Stream.empty();
})
.forEach(req -> {
log.trace("setting update");
req.setUpdate(isPut);
});
}
}