优雅的进行空判断

批量校验一个java bean的字段是否为空,并返回提示

最近项目在写对外接口,对方使用http请求访问,此时接口字段的校验成为一个问题,字段很多,单个校验非常的麻烦,用springmvc自带的注解校验又达不到提示作用,不是很友好,所有写了一个工具类用来批量校验字段。

利用到spring中的类:
org.springframework.beans.BeanUtils
java.beans.PropertyDescriptor
说明:主要实现了俩个方法:
1.整个类的字段都校验
2.类中的某些方法不校验。
运行结果:

接口反馈信息:{"code":10000,"msg":"[\"Litigants中的name不能为空\"]"}

转载:https://blog.csdn.net/shidebin/article/details/86543769

package com.zqsign.app.privatearbitrate.util;

import java.beans.PropertyDescriptor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.FatalBeanException;

import com.zqsign.common.utils.StringUtil;

/**
    * @ClassName: ValidateUtil
    * @Description: TODO(这里用一句话描述这个类的作用)
    * @author shidebin
    * @date 2019年1月18日
    *
    */

public class ValidateUtil {
//整个类都校验
	public static List<String> validateProperty(Object validateObj) {
		return validateProperty(validateObj,(String[])null);
	}
	//类中的某些字段不校验
	public static List<String> validateProperty(Object validateObj,String... ignoreProperties) {
		PropertyDescriptor[] targetPds = BeanUtils.getPropertyDescriptors(validateObj.getClass());
		List<String> ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null);
		List<String> errList = new ArrayList<>();
		for (PropertyDescriptor targetPd : targetPds) {
			Method readMethod = targetPd.getReadMethod();
			if (readMethod != null && (ignoreList == null || !ignoreList.contains(targetPd.getName()))) {
				try {
					if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
						readMethod.setAccessible(true);
					}
					Object value = readMethod.invoke(validateObj);
					if (value instanceof String) {
						if (StringUtil.isEmpty((String) value)) {
							errList.add(validateObj.getClass().getSimpleName()+ "中的" + targetPd.getName() + "不能为空");
							continue;
						}
					}
					if (value == null) {
						errList.add(validateObj.getClass().getSimpleName() + "中的" + targetPd.getName() + "不能为空");
					}
				} catch (Throwable ex) {
					throw new FatalBeanException(
							"Could not copy property '" + targetPd.getName() + "' from source to target", ex);
				}
			}
		}
		return errList;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值