[b]自定义注解检测数据有效性[/b]
参考原文:http://blog.csdn.net/maguanghui_2012/article/details/69372209
package com.midea.common;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface ModelFieldValidity {
long max() default Long.MAX_VALUE;
long min() default Long.MIN_VALUE;
long maxLen() default Long.MAX_VALUE;
long minLen() default Long.MIN_VALUE;
boolean enableNull() default false;
}
package com.midea.common.Model;
import com.midea.common.ModelFieldValidity;
public class DescriptionModel {
@ModelFieldValidity(max = 15, min = 0)
private int age;
@ModelFieldValidity(max = 15, min = 0, enableNull = true)
private Integer high;
@ModelFieldValidity(maxLen = 8, minLen = 1, enableNull = true)
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getHigh() {
return high;
}
public void setHigh(int high) {
this.high = high;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "DescriptionModel [age=" + age + ", high=" + high + ", name=" + name + "]";
}
}
package com.midea.common;
import java.lang.reflect.Field;
public class ModelFieldValidityUtils {
/**
* @param t
* @return 校验通过返回null,校验失败返回失败原因
*/
public static <T> String checkModelFields(T t) {
String result = null;
Field[] fields = t.getClass().getDeclaredFields();
for (Field field : fields) {
ModelFieldValidity modelFieldValidity = field.getAnnotation(ModelFieldValidity.class);
if (null == modelFieldValidity) {
continue;
}
try {
field.setAccessible(true);
Object object = field.get(t);
// 判断是否可以为空
if (null == object) {
boolean enableNull = modelFieldValidity.enableNull();
// System.out.println("enableNull == " + enableNull);
if (!enableNull) {
result = field.getName() + " is null";
return result;
} else {
continue;
}
}
if (object instanceof Number) {
// Number比较
Long max = modelFieldValidity.max();
Long min = modelFieldValidity.min();
// System.out.println("max == " + max);
// System.out.println("min == " + min);
// System.out.println("Number == " + object);
int check = ModelFieldValidityUtils.check(max, min, (Number) object);
if (check == 1) {
result = field.getName() + " = " + object + " > max(" + max + ")";
return result;
} else if (check == -1) {
result = field.getName() + " = " + object + " < min(" + min + ")";
return result;
} else {
continue;
}
} else if (object instanceof String) {
// String比较
Long maxLen = modelFieldValidity.maxLen();
Long minLen = modelFieldValidity.minLen();
// System.out.println("maxLen == " + maxLen);
// System.out.println("minLen == " + minLen);
// System.out.println("String == " + object);
int check = ModelFieldValidityUtils.check(maxLen, minLen, ((String) object).length());
if (check == 1) {
result = field.getName() + " Len = " + ((String) object).length() + " > maxLen(" + maxLen + ")";
return result;
} else if (check == -1) {
result = field.getName() + " Len = " + ((String) object).length() + " < minLen(" + minLen + ")";
return result;
} else {
continue;
}
}
} catch (IllegalArgumentException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
result = e1.getMessage();
return result;
} catch (IllegalAccessException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
result = e1.getMessage();
return result;
}
}
return result;
}
private static <T extends Number> int check(T max, T min, T object) {
if (object.doubleValue() > max.doubleValue()) {
return 1;
}
if (object.doubleValue() < min.doubleValue()) {
return -1;
}
return 0;
}
}
package com.midea.common;
import java.lang.reflect.Field;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.midea.common.Model.DescriptionModel;
public class ModelFieldValidityUtilsTest {
final static Logger logger = LogManager.getLogger(ModelFieldValidityUtilsTest.class);
public static void main(String[] args) {
DescriptionModel descriptionModel = new DescriptionModel();
descriptionModel.setAge(1);
descriptionModel.setHigh(1);
descriptionModel.setName("asa");
System.out.println("descriptionModel == " + descriptionModel.toString());
// String result = null;
String result = ModelFieldValidityUtils.checkModelFields(descriptionModel);
System.out.println("result == " + result);
}
}
参考原文:http://blog.csdn.net/maguanghui_2012/article/details/69372209