如何实现Java接口入参校验

流程图

flowchart TD
    A[定义接口] --> B[定义校验注解]
    B --> C[实现校验逻辑]
    C --> D[使用注解进行校验]

整体流程

步骤 描述
1 定义接口
2 定义校验注解
3 实现校验逻辑
4 使用注解进行校验

每一步具体操作

步骤1:定义接口

在实现接口的时候,需要定义方法的参数,并且在方法的参数上添加校验注解。

public interface UserService {
    void addUser(@ParamValid(min = 1, max = 10) String username, @ParamValid(min = 18, max = 60) int age);
}

步骤2:定义校验注解

创建一个注解类,用于定义参数的校验规则。

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ParamValid {
    int min() default 0;
    int max() default Integer.MAX_VALUE;
}

步骤3:实现校验逻辑

编写校验逻辑的实现类,实现参数的校验逻辑。

public class ParamValidAspect {

    @Around("execution(* com.example.UserService.*(..))")
    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Method method = methodSignature.getMethod();
        Annotation[][] parameterAnnotations = method.getParameterAnnotations();
        Object[] args = joinPoint.getArgs();
        
        for (int i = 0; i < args.length; i++) {
            Annotation[] annotations = parameterAnnotations[i];
            for (Annotation annotation : annotations) {
                if (annotation instanceof ParamValid) {
                    ParamValid paramValid = (ParamValid) annotation;
                    int min = paramValid.min();
                    int max = paramValid.max();
                    if (args[i] instanceof String) {
                        String arg = (String) args[i];
                        if (arg.length() < min || arg.length() > max) {
                            throw new IllegalArgumentException("参数校验失败");
                        }
                    } else if (args[i] instanceof Integer) {
                        int arg = (int) args[i];
                        if (arg < min || arg > max) {
                            throw new IllegalArgumentException("参数校验失败");
                        }
                    }
                }
            }
        }
        
        return joinPoint.proceed();
    }
}

步骤4:使用注解进行校验

在实现类中使用定义的注解进行参数校验。

@Component
public class UserServiceImpl implements UserService {

    @Override
    public void addUser(String username, int age) {
        // 方法内部逻辑
    }
}

总结

通过以上步骤,我们可以实现Java接口入参的校验功能。首先定义接口并在方法参数上添加校验注解,然后定义校验注解的规则并实现校验逻辑,最后在实现类中使用注解进行参数校验。这样可以有效地保证接口的输入参数符合规范,提高代码的健壮性和可维护性。希望这篇文章对你有所帮助!