/**
* 限制字符长度
* @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;
}
}