工具类,cotroller层,校验参数是否为空

使用了jdk1.8的Optional;
然后就是通过反射去看字段是否有值;

flag=true,则过滤掉需要排除的字段,对其余的字段进行判空;flag=false,仅传递过来的字段进行判空,对其余的字段进行过滤

/**
     * 所有的字段当中需要排除的字段过滤下来需要过滤的字段
     * @param obj
     * @param flag
     * @param excludeFiledList
     * @return
     */
    public Map checkParams(Object obj,boolean flag, Object... excludeFiledList)  {
        /**flag=true,则过滤掉需要排除的字段,对其余的字段进行判空;flag=false,仅传递过来的字段进行判空,对其余的字段进行过滤 */
        List excludeFileds = Arrays.asList(excludeFiledList);
        Map<String,Object> respParams=new HashMap<String,Object>();
        try{
            if(Optional.ofNullable(excludeFileds).isPresent() && excludeFileds.size()>0){
                Class c = obj.getClass();
                Field[] fields = c.getDeclaredFields();
                List<Field> needFilterFields = new ArrayList<Field>();
                if(flag) {
                    /**过滤掉需要排除的字段,对其余字段进行判空*/
                    for (Field field : fields) {
                        if (excludeFileds.indexOf(field.getName()) == -1) {
                            needFilterFields.add(field);
                        }
                    }
                }else{
                    /**对传递过来的字段进行判空,其余字段过滤排除*/
                    for (Object fieldName : excludeFileds) {
                        needFilterFields.add(c.getDeclaredField(fieldName.toString()));
                    }
                }
                if(needFilterFields.size()>0){
                    for (Field field : needFilterFields) {
                        field.setAccessible(true);
                        Method method = c.getMethod(("get" + (field.getName().substring(0, 1).toUpperCase()) + (field.getName().substring(1, field.getName().length()))));
                        Object value = method.invoke(obj);
                        if (!Optional.ofNullable(value).isPresent()) {
                            respParams.put("code", ResultCode.PARAMS_IS_EMPTY);
                            respParams.put("respCode", "failure");
                            respParams.put("respMsg", "上送" + field.getName() + "为空,请检查参数并重新上送");
                            return respParams;
                        }
                    }
                    respParams.put("respCode", "success");
                }else{
                    respParams.put("respCode", "success");
                }
            }else{
                respParams.put("respCode", "success");
            }
        }catch (NoSuchMethodException e){
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        return respParams;
    }

调用

 /**
    jdk 8 Optional运用
     */
    @org.junit.Test
    public void testReadPropertiesFile() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//        String  tUserAddress="tUserAddress";
//        System.out.println(Optional.ofNullable(tUserAddress).orElseGet(()->"tUserAddress为空"));
//        TUserAddress tUserAddress=null;
//        System.out.println(Optional.ofNullable(tUserAddress).isPresent());

        //排除哪一个字段不需要判空,其他字段需要判空处理
        TUserAddress tUserAddress=new TUserAddress();
//        tUserAddress.setUserId(1);
//        tUserAddress.setZipCode("tset");
//        tUserAddress.setAddress2("09088734234234");
//        tUserAddress.setAddress1("rwerwerwerwer");

//        Map resp= checkParams(tUserAddress,true,"lastUpdateBy","createDate","lastUpdateDate","address2","id");
//        Map resp= checkParams(tUserAddress,false,"id");
//        System.out.println(resp.get("respCode")+" "+resp.get("respMsg"));

//        List<String> list=new ArrayList<String>();
//        list.add("userId");
        System.out.println(checkParams(tUserAddress, true ,"lastUpdateBy","createDate","lastUpdateDate","address2","id"));
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值