@RestController
public class TestController {
@GetMapping("/hello/{userId}")
@Audit(type = AuditType.CREATE)
public String hello(@AuditField @PathVariable long userId) {
return "hello";
}
}
Я хочу отсканировать аннотацию @ Audit вместе с @ AuditField . Сканирование @Audit работает нормально, но я также хочу получить значение параметра @ AuditField . Вот в моем случае userId .
Я определил Аспект для @AfterReturning advice.
import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class AuditAspect {
@AfterReturning(pointcut = "@annotation(audit)", returning = "result")
public void audit(JoinPoint jp, Object result, Audit audit) throws Exception {
List<Object> auditFields = getAuditData(jp.getArgs());
System.out.println(auditFields);
}
private List<Object> getAuditData(Object[] args) {
return Arrays.stream(args)
.filter(arg -> arg instanceof AuditField)
.collect(Collectors.toList());
}
}
Но при доступе к hello / 1 AuditFields показывает пустое.