首页 > 解决方案 > springboot-aop 无法获取 joinPoint 参数的类对象

问题描述

我正在尝试通过spring AOP获取一些方法参数,然后尝试使用getClass()获取参数的类对象,但我无法获取类对象,例如java.sql.Time,它会抛出java.lang.NullPointerException。有代码片段:

com.example.vzard.web.TUserController.java

@RequestMapping(value = "/user",method = RequestMethod.POST)
@TimeStamp(type = TUser.class)
 public boolean addUser(TUser user, Object o, Time time){
        return itUserService.insertAllColumn(user);
    }

com.example.vzard.annotation.TimeStamp.java

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TimeStamp {
    Class type() default Object.class;

    TimeStampRank rank() default TimeStampRank.FULL;
}

com.example.vzard.aspect.TimeStampAspect.java

@Pointcut("@annotation(com.example.vzard.annotation.TimeStamp)")
public void pointCut(){

}

@Before("pointCut() && @annotation(timeStamp)")
public void before(JoinPoint joinPoint,TimeStamp timeStamp){
    Long currentTime = System.currentTimeMillis();
    Class type = timeStamp.type();

    Object[] argList = joinPoint.getArgs();
    System.out.println(argList.length);
    for (Object arg : argList) {
        //there will throw Exception
        log.info(arg.getClass().toString());

    }

}

我发现它可能与参数类是否有空构造函数有关,当我java.sql.Time用空构造函数替换某些类时会好的,但我不确定这是否是真正的原因。

标签: javaspring-bootaopspring-aop

解决方案


推荐阅读