自定义一个注解校验接口参数

本文介绍了如何在SDK开发中自定义注解进行参数校验,包括注解类的编写、校验实例对象的方法及测试用例。通过注解实现了对长度、空值、数量和数值大小的检查,满足多数需求。最后展示了Person类和测试类的部分代码,以及测试结果。
摘要由CSDN通过智能技术生成

这段时间封装了很多的sdk,有一些sdk要求请求参数做验证,由于封装sdk肯定是用到第三方的依赖越少越好,所以自己不才写了一个注解的校验,本版本校验没有给出自定一点message,如果要可以自己加上,修改一下即可。下面就说一下这个怎么实现的吧:

一:注解类:

注解类代码如下:

package com.blog.annotation.one;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * @author 哲思小辉
 * @className CheckNull
 * @description 校验参数一个注解
 * @createTime 2020年7月30日 16:48:38
 */
@Target({FIELD, ElementType.TYPE, ElementType.PARAMETER})
@Retention(RUNTIME)
public @interface CheckNull {

    /**
     * 是否校验为null
     *
     * @return
     */
    boolean notNull() default false;

    /**
     * 默认检查为空
     *
     * @return
     */
    boolean notEmpty() default false;


    /**
     * 长度最小值,集合最小值,map键最小个数
     *
     * @return
     */
    int minLength() default 0;

    /**
     * 长度最大值,集合最小值,map键最大个数
     *
     * @return
     */
    int maxLength() default 0;

    /**
     * 长度固定值
     *
     * @return
     */
    int equalLength() default 0;

    /**
     * 最小值 (针对基本数据类型)
     *
     * @return
     */
    String minValue() default "";

    /**
     * 最大值 (针对基本数据类型)
     *
     * @return
     */
    String maxValue() default "";

    /**
     * 相等的值
     *
     * @return
     */
    String equalValue() default "";

    /**
     * String包含的数值, Map中必须存在的key
     *
     * @return
     */
    String[] strContains() default {};

    /**
     * 是否去除前后空格(字符串)
     *
     * @return
     */
    boolean trim() default true;

}

二、校验使用注解的实例对象方法

注解写好了,现在要写它的校验,如何来判断该字段是否符合注解里面定义的呢,下面就是校验的代码:

package com.blog.annotation.one;


import java.lang.reflect.Field;
import java.util.*;

/**
 * @author 哲思小辉
 * @className CheckNullUtil
 * @description 单一注解检测工具
 * @createTime 2020年7月30日 16:40:52
 */
public final class CheckNullUtils {
    private CheckNullUtils() {
    }

    private static final String ILLEGAL_STR = "%s值非法";
    private static final String ILLEGAL_NULL_OR_EMPTY_STR = "%s为空";

    /**
     * 长度类错误字符串
     */
    private static final String ILLEGAL_MIN_LENGTH_STR = "%s长度小于%s";
    private static final String ILLEGAL_MAX_LENGTH_STR = "%s长度大于%s";
    private static final String ILLEGAL_EQUAL_LENGTH_STR = "%s长度不等于%s";

    /**
     * 个数类错误字符串
     */
    private static final String ILLEGAL_MIN_SIZE_STR = "%s元素个数小于%s";
    private static final String ILLEGAL_MAX_SIZE_STR = "%s元素个数大于%s";
    private static final String ILLEGAL_EQUAL_SIZE_STR = "%s元素个数不等于%s";

    /**
     * 数值类错误字符串
     */
    private static final String ILLEGAL_MIN_VALUE_STR = "%s值小于%s";
    private static final String ILLEGAL_MAX_VALUE_STR = "%s值大于%s";
    private static final String ILLEGAL_EQUAL_VALUE_STR = "%s值不等于%s";

    private static final String ILLEGAL_FIELD_MISSING_STR = "%s字段缺失";
    private static final String ILLEGAL_FIELD_ERROR_STR = "%s中有参数为空";

    private static final String GET_VALUE_FAIL_STR = "参数%s获取值失败";
    private static final String REQUEST_OBJECT_NOT_NULL_STR = "请求对象为空";


    /**
     * 基本数据类型set
     */
    private static Set<Class> set;

    static {
        set = new HashSet<>();
        set.add(int.class);
        set.add(short.class);
        set.add(byte.class);
        set.add(boolean.class);
        set.add(float.class);
        set.add(double.class);
        set.add(long.class);
        set.add(char.class);
    }

    /**
     * 判断为空并且如果字符串不去除空格
     *
     * @param object
     * @param message
     * @throws E
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值