java 使用注解判断实体类属性值长度

/**
 * 限制字符长度
 * @author si
 */
@Target({ ElementType.FIELD, ElementType.TYPE })
@Inherited
@Documented
@Retention(RetentionPolicy.RUNTIME)
public @interface DataLen {
    int value();
}
  @DataLen(20)
    private String name;
    @DataLen(1)
    private String sex;
    @DataLen(2)
    private Integer age;

只可以在属性值,因为判断的是其中一个属性值,使用的反射机制

/**
 * @author :si
 * @date :2022/11/22 校验数据长度的帮助类
 */
public class DataLenCheckHelper {
    /** * 校验数据属性至 * * @param obj * @throws Exception */
    @SuppressWarnings("rawtypes")
    public static Boolean checkAttributeValueLen(Object obj){
        boolean flag = false;
        if (null != obj) {
            // 得到class
            Class cls = obj.getClass();
            // 得到所有属性
            Field[] fields = cls.getDeclaredFields();
            for (Field item : fields) {
                // 遍历
                try {
                    // 得到属性
                    Annotation[] anns = item.getAnnotations();
                    DataLen dataLen = null;
                    for (Annotation ann : anns) {
                        if (ann instanceof DataLen) {
                            dataLen = (DataLen) ann;
                        }
                    }
                    // 判断该属性是否有校验数据长度的注解
                    if (null != dataLen) {
                        // 打开私有访问
                        item.setAccessible(true);
                        // 获取属性
                        String name = item.getName();
                        // 获取属性值
                        Object value = item.get(obj);
                        // 指定的长度
                        int len = dataLen.value();
                        // 数据的长度
                        int vaLen = 0;
                        String data;
                        // 一个个赋值
                        if (String.valueOf(value) != null) {
                            data = String.valueOf(value);
                            vaLen = data.length();
                        }
                        if (vaLen > len) {
                            System.err.println(name);
                            flag = true;
                            break;
                        }
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
        return flag;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值