1.添加AOP依赖与lombok依赖(用于下面打印日志用,可根据自己项目修改日志框架)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
2.创建切面类
使用@Aspect
和@Component
注解来标记切面类, 然后定义切点和通知
@Aspect
@Component
@Slf4j
public class ParamValidationAspect {
// 使用@annotation来定义切点,拦截所有带有@ValidateParam注解的方法
@Pointcut("@annotation(com.aopText.service.annotation.ValidateParam)") //为自定义注解,修改成自己的注解路径
public void validateMethods() {
}
// 前置通知,在方法执行前进行参数校验
@Before("validateMethods()")
public void beforeAdvice(JoinPoint joinPoint) {
// 获取方法参数
Object[] args = joinPoint.getArgs();
log.info("进入参数校验方法---,具体参数{}",args[0])
// 进行参数校验...
//...
}
}
3.编写自定义注解类
// 定义注解的保留策略为运行时,这样在运行时可以通过反射读取注解信息
@Retention(RetentionPolicy.RUNTIME)
// 定义注解可以作用的目标,这里定义在方法上
@Target(ElementType.METHOD)
// 标记注解
@Documented
public @interface ValidateParam {
// 还可以定义其他属性,根据校验需求来扩展
// ...
}
4.将自定义注解ValidateParam标记在需要被校验参数的接口中,可以修饰控制层方法,也可以修饰逻辑层方法
4.1添加在service中
public interface MyService {
@ValidateParam
void registerUser(QueryDto queryDto);
// 其他方法...
}
4.2添加在controller中
@Slf4j
@RestController
@RequestMapping("/userInfo")
public class UserInfoController{
@GetMapping("/queryUser")
@ValidateParam
public Result queryUser(@RequestBody QueryVO queryVO) {
return service.queryUser(queryVO);
}
}