@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建议的方面。
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显示为空。
答案 0 :(得分:0)
您的假设是,通过对方法参数进行注释而使其以某种方式成为int factorial(int n){
if (n > 0)
return n * factorial(n-1);
return 1;
}
,注释类是错误的,并且是不合逻辑的。相反,您需要做的是扫描方法签名中的参数注释,然后在方法签名的相应位置处返回方法参数,类似于这些答案中的示例代码,每个示例都显示出问题的细微变化:>