应用场景
前端输入参数不全,后端在进行处理之前通过切面类补全必要信息
实现思路
1.定义注解
2.编写切面类,解析注解
3.将注解添加到需要补全参数的方法上
实现Demo
1.在pom文件中导入切面类依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.创建注解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DefaultParam {
}
3.创建解析注解的切面类
@Component
@Aspect
public class DefaultParamAspect {
//lombok注解,将方法内异常向上抛出
@SneakyThrows
//在包含该注解的方法运行之前执行下述方法
@Before("@annotation(com.wwj.annotation.DefaultParam)")
public void fillParam(JoinPoint point){
//获取监控方法的参数
Object[] args = point.getArgs();
for (Object arg : args) {
Class<?> aClass = arg.getClass();
//通过反射补全参数信息
Method method = aClass.getMethod("getName");
if(method!=null){
String invoke = (String)method.invoke(arg);
if(invoke==null||invoke.length()==0){
method = aClass.getMethod("setName",String.class);
if(method!=null){
method.invoke(arg,"defaultName");
}
}
}
method = aClass.getMethod("getAge");
if(method!=null){
Object invoke = method.invoke(arg);
if(invoke==null){
method = aClass.getMethod("setAge",Integer.class);
if(method!=null){
method.invoke(arg,18);
}
}
}
method = aClass.getMethod("getDescription");
if(method!=null){
String invoke = (String)method.invoke(arg);
if(invoke==null||invoke.length()==0){
method = aClass.getMethod("setDescription",String.class);
if(method!=null){
method.invoke(arg,"defaultDescription");
}
}
}
}
}
}
4.在需要补全参数的方法上添加定义的注解
@RequestMapping("/getUser")
@DefaultParam
@ApiOperation("获取数据")
public User getUser(@RequestBody User user){
return user;
}
运行结果