这个是用来验证表单传来的json对象里是否必填,如果值为null或者“”时返回属性的名字
代码
/**
* java反射机制判断对象所有属性是否全部为空
* @param obj
* @return 返回属性名称
*/
public static String checkObjFieldIsNotNull(Object obj,String remark){
try {
for (Field f : obj.getClass().getDeclaredFields()) {
f.setAccessible(true);
if(f.getName().equals(remark)){
continue;
}
if (f.get(obj) == null || f.get(obj) == "") {
return f.getName();
}
}
}catch (Exception e){
return null;
}
return null;
}
如果只需要返回boolean类型可以改成下面这种
/**
* java反射机制判断对象所有属性是否全部为空
* @param obj
* @return 返回属性名称
*/
public static boolean checkObjFieldIsNotNull(Object obj,String remark){
try {
for (Field f : obj.getClass().getDeclaredFields()) {
f.setAccessible(true);
if(f.getName().equals(remark)){
continue;
}
if (f.get(obj) == null || f.get(obj) == "") {
return false;
}
}
}catch (Exception e){
return false;
}
return true;
}
之后遇到有些对象运行某些成员属性w为null,采用上面的方法就有点不可用了,所有采用了一种注解的方式
在类属性上添加@AllowNull,则可以运行这个属性为null。
关于注解,可以看这篇文章秒懂,Java 注解 (Annotation)你可以这样学
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface AllowNull {
String value() default "";
}
判断方法
/**
* 通过实体类中添加注解来判断是否对象是否可以为null
* @param obj
* @return
*/
public static Boolean checkNotNull(Object obj) {
try {
Class<?> clazz = obj.getClass();
//获得私有的成员属性
Field[] fields = clazz.getDeclaredFields();
if(fields!=null && fields.length>0){
for(Field f : fields){
f.setAccessible(true);
//判断AllowNull注解是否存在
if(f.isAnnotationPresent(AllowNull.class)){
continue;
}else {
if(f.get(obj)==null || "".equals(f.get(obj))){
return false;
}
}
}
}
} catch (IllegalAccessException e) {
return false;
}
return true;
}
最后测试
public class AnnoTest {
@AllowNull
private String name;
public static void main(String[] args) {
AnnoTest annoTest = new AnnoTest();
Boolean aBoolean = ReflectUtils.checkNotNull(annoTest);
System.out.println(aBoolean);
}
}
输出结果
结果输出true