通过反射校验实体类中属性值是否符合要求

业务逻辑中通常对于保存或者导入的信息需要进行校验,这时候我们如果通过后台校验可能需要大量的ifelse去判断,那不如通过一个反射写一个通用的校验,请看代码--》 


import org.apache.commons.lang3.ObjectUtils;

import java.lang.reflect.Field;
import java.util.*;

/**
 * @Author: yitianRen
 * @Date: 14:30 2020/8/1
 * @Description:
 * @Version v1.0
 */
public class CheckEntityFieldValueEmpty {

    //基本信息非空字段
    public static final String[] AM_HIGH_TALENT_INFO_FIELDS =
            {"name", "sex", "idNum", "orgFullName", "orgType", "adminPost", "pqLevel", "education", "mobile", "email", "address", "talenLevel","hightTalentType"};
    //高端会计人才非空字段
    public static final String[] AM_HIGH_TALENT_INFO_FIELDS_QGLJ =
            {"talentType", "year", "culStatus", "graDate"};
    //高端会计人才特殊支持计划非空字段
    public static final String[] AM_HIGH_TALENT_INFO_FIELDS_KJTSZCJH =
            {"year", "culStatus", "graDate"};
    //全国大中型企事业单位总会计师培养(高端班)非空字段
    public static final String[] AM_HIGH_TALENT_INFO_FIELDS_KJSPYG =
            {"talentType", "talentPeriod", "culStatus", "graDate"};

    //校验保存或者导入实体类中不能为空值的项
    /**
     *@Author: yitianRen
     *@Date: 17:12 2020/8/1
     *@Description:
     * @param isList 提示语
     * @param listIndex 第几项
     * @param notEmptyStrs 不能为空的字段值
     * @param obj 实体
     *@Version v1.0
     */
    public static List<Map<String,String>> checkEntity(String[] notEmptyStrs, Object obj,int isList,int listIndex){
        List<Map<String,String>> resutList = new LinkedList<>();
       /* for (int i = 0; i < checkList.size(); i++) {
            Object obj = checkList.get(i);*/
            Field[] fields = obj.getClass().getDeclaredFields();
            Map<String,String> map = new HashMap<>();
            StringBuffer sb =new StringBuffer();
            if(isList == -1){
                sb.append("当前单据中基础项");
            }else if(isList == -3){
                sb.append("第"+(listIndex+1)+"列中基础项");
            }else if(isList == -2){
                sb.append("当前单据中锁定项");
            }
            else if(isList == -4){
                sb.append("第"+(listIndex+1)+"列中锁定项");
            }
            Boolean isEmpty = false;
            for (Field f:fields) {
                try {
                    //校验是否是需要校验字段
                    if (Arrays.asList(notEmptyStrs).contains(f.getName())) {
                        f.setAccessible(true);
                        Object value = f.get(obj);
                        String str = ObjectUtils.toString(value, "");
                        if (StringUtil.isEmpty(str)) {
                            isEmpty = true;
                            sb.append(getName(f.getName()));
                        }
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
            sb.append("项不能为空!");
            map.put("emptyField",sb.toString());
            if(isEmpty){
                resutList.add(map);
            }
        //}
        return resutList;
    }

    private static String getName(String name) {
        Map<String,String> nameMap = new HashMap<>();
        nameMap.put("name","姓名");
        nameMap.put("sex","性别");
        nameMap.put("idNum","身份证号");
        nameMap.put("orgFullName","工作单位全称");
        nameMap.put("orgType","工作单位类别");
        nameMap.put("adminPost","会计人员职务");
        nameMap.put("pqLevel","职称");
        nameMap.put("education","学历");
        nameMap.put("mobile","手机号");
        nameMap.put("email","电子邮箱");
        nameMap.put("address","通讯地址");
        nameMap.put("talenLevel","高端会计人才级别");
        nameMap.put("hightTalentType","会计人才类型");
        nameMap.put("talentType","高端会计人才类别");
        nameMap.put("year","年度");
        nameMap.put("hightClassType","高端班类别");
        nameMap.put("talentPeriod","期次");
        nameMap.put("culStatus","培养状态");
        nameMap.put("graDate","毕业年度");
        return "【"+nameMap.get(name)+"】";
    }

}

参考使用:

CheckEntityFieldValueEmpty.checkEntity(CheckEntityFieldValueEmpty.AM_HIGH_TALENT_INFO_FIELDS,highTalentInfoVo,-1,0);

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值