传一个类名通过反射自动注入到实体并执行方法

因为jfianl没有getBeans/getModles方法,所以写了这个方法

前端值

ywlx: dlqlsqb
value: [{"sub_form":{"dlqlsqb.id":"","_jfinal_token":"971723637952346332","dlqlsqb.applyId":"","dlqlsqb.sblsh":"sblsh402880c57e0a3a72017e0aa4564f01dd","dlqlsqb.sbmc":"ytjhty","dlqlsqb.hypy":"123","dlqlsqb.ldyhdwhzyjzw":"123","dlqlsqb.mmhy":"123","dlqlsqb.ywlx":"dlqlsqb","dlqlsqb.ywlxName":"道路(街巷、桥梁、隧道)命名","dlqlsqb.zd":"","dlqlsqb.kd":"123","dlqlsqb.qddd":"","dlqlsqb.yddd":"213","dlqlsqb.qd":"","dlqlsqb.zzd":"","dlqlsqb.jsydghxkz":"","dlqlsqb.jsydghxkzhNf":"","dlqlsqb.jsydghxkzh":""},"sub_parm":"dlqlsqb.id=&_jfinal_token=971723637952346332&dlqlsqb.applyId=&dlqlsqb.sblsh=sblsh402880c57e0a3a72017e0aa4564f01dd&dlqlsqb.sbmc=ytjhty&dlqlsqb.hypy=123&dlqlsqb.ldyhdwhzyjzw=123&dlqlsqb.mmhy=123&dlqlsqb.ywlx=dlqlsqb&dlqlsqb.ywlxName=%E9%81%93%E8%B7%AF%EF%BC%88%E8%A1%97%E5%B7%B7%E3%80%81%E6%A1%A5%E6%A2%81%E3%80%81%E9%9A%A7%E9%81%93%EF%BC%89%E5%91%BD%E5%90%8D&dlqlsqb.zd=&dlqlsqb.kd=123&dlqlsqb.qddd=&dlqlsqb.yddd=213&dlqlsqb.qd=&dlqlsqb.zzd=&dlqlsqb.jsydghxkz=&dlqlsqb.jsydghxkzhNf=&dlqlsqb.jsydghxkzh="},{"sub_form":{"dlqlsqb.id":"","_jfinal_token":"-5500225404927983624","dlqlsqb.applyId":"","dlqlsqb.sblsh":"sblsh402880c57e0a3a72017e0aa5c44a01fa","dlqlsqb.sbmc":"tyhy","dlqlsqb.hypy":"zxc","dlqlsqb.ldyhdwhzyjzw":"zxc","dlqlsqb.mmhy":"xzc","dlqlsqb.ywlx":"dlqlsqb","dlqlsqb.ywlxName":"道路(街巷、桥梁、隧道)命名","dlqlsqb.zd":"zxc","dlqlsqb.kd":"zxc","dlqlsqb.qddd":"zxc","dlqlsqb.yddd":"zxc","dlqlsqb.qd":"zxc","dlqlsqb.zzd":"zxc","dlqlsqb.jsydghxkz":"","dlqlsqb.jsydghxkzhNf":"","dlqlsqb.jsydghxkzh":"zxc"},"sub_parm":"dlqlsqb.id=&_jfinal_token=-5500225404927983624&dlqlsqb.applyId=&dlqlsqb.sblsh=sblsh402880c57e0a3a72017e0aa5c44a01fa&dlqlsqb.sbmc=tyhy&dlqlsqb.hypy=zxc&dlqlsqb.ldyhdwhzyjzw=zxc&dlqlsqb.mmhy=xzc&dlqlsqb.ywlx=dlqlsqb&dlqlsqb.ywlxName=%E9%81%93%E8%B7%AF%EF%BC%88%E8%A1%97%E5%B7%B7%E3%80%81%E6%A1%A5%E6%A2%81%E3%80%81%E9%9A%A7%E9%81%93%EF%BC%89%E5%91%BD%E5%90%8D&dlqlsqb.zd=zxc&dlqlsqb.kd=zxc&dlqlsqb.qddd=zxc&dlqlsqb.yddd=zxc&dlqlsqb.qd=zxc&dlqlsqb.zzd=zxc&dlqlsqb.jsydghxkz=&dlqlsqb.jsydghxkzhNf=&dlqlsqb.jsydghxkzh=zxc"}]
applyId: 402880c57e0a3a72017e0aa68df40214

后端代码

    private static <T> T createInstance(Class<T> objClass) {
        try {
            return objClass.newInstance();
        } catch (Exception var2) {
            throw new RuntimeException(var2);
        }
    }

    public void saveSubTableData() throws IllegalAccessException, InstantiationException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException {
        //value的值根据ywlx用反射注入到实体中
        String originYwlx = getPara("ywlx");
        String applyId = getPara("applyId");
        char[] cs=originYwlx.toCharArray();
        cs[0]-=32;
        String convertYwlx = String.valueOf(cs);
        JSONArray jsonArray = JSONArray.parseArray(getPara("value"));
        boolean flag = true;

        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject = (JSONObject) jsonArray.get(i);
            JSONObject data = (JSONObject) jsonObject.get("sub_form");
            String parasMap = jsonObject.toJSONString();
            TypeConverter converter = TypeConverter.me();
            Class clz = Class.forName("com.huiyu.portal.business.model."+convertYwlx);
            Object bean = createInstance(clz);
            String beanName = originYwlx;
            String modelNameAndDot = StrKit.notBlank(beanName) ? beanName + "." : null;
            // 获得这个类的所有方法
            Method[] methods = clz.getMethods();
            // 循环查找想要的方法
            for(Method method : methods) {
                String methodName = method.getName();
                if (methodName.startsWith("set") && methodName.length() > 3) {
                    Class<?>[] types = method.getParameterTypes();
                    if (types.length == 1) {
                        String attrName = StrKit.firstCharToLowerCase(methodName.substring(3));
                        String paraName = modelNameAndDot != null ? modelNameAndDot + attrName : attrName;
                        if (parasMap.contains(paraName)) {
                            try {
                                String paraValue = data.getString(paraName);
                                Object value = paraValue != null ? converter.convert(types[0], paraValue) : null;
                                method.invoke(bean, value);
                            } catch (Exception var19) {
                                 throw new RuntimeException("Can not convert parameter: " + paraName, var19);
                            }
                        }

                        if("setId".equals(method.getName())) {
                            // 调用这个方法,invoke第一个参数是类名,后面是方法需要的参数
                            method.invoke(bean, createUUID());
                        }
                        if("setSbsj".equals(method.getName())) {
                            // 调用这个方法,invoke第一个参数是类名,后面是方法需要的参数
                            method.invoke(bean, new Date());
                        }
                        if("setApplyId".equals(method.getName())) {
                            // 调用这个方法,invoke第一个参数是类名,后面是方法需要的参数
                            method.invoke(bean, applyId);
                        }
                    }
                }
            }

            // 调用指定方法
            boolean state = (boolean) clz.getMethod("save").invoke(bean, null);
            if (state == false){
                flag = false;
            }
        }

        if(flag){
            renderJson(ok(applyId));
        }else{
            renderJson(fail());
        }

    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值