该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

beanutils

介绍

我们在实际开发的过程中,需要将几个Javabean对象,糅合成一个json对象,返回给前台,这时,就需要过滤数据。 我们使用的commons-beanutils这个框架,于是,自己看了源码后,仿写了这个框架。于是,把这个框架贡献出来, 供大家学习使用。详细介绍,请参考我的博客:https://segmentfault.com/write?draftId=1220000018204853

软件架构

  1. 这里使用了日志文件,因而,配置文件放在资源包下,即resources中 2、核心方法是PropertyUtil这个类,这个类的设计思想如下
    • 如果javabean的对象属性类型不是用户自定义的类型,我们根据反射调用get方法拿到属性的值
    • 如果javabean的对象属性类型是用户自定义的类型,我们利用递归重新调用改方法,直到出现遇见上面的条件
        clazz = bean.getClass();
            if (props.indexOf(".") != -1) {
                methodName = MethodHelper.propsToGetMethod(props.substring(0, props.indexOf(".")));
                Method method = clazz.getDeclaredMethod(methodName);
                Object obj = method.invoke(bean);
                return getProperty(obj, props.substring(props.indexOf(".") + 1));
            }
            Field field = clazz.getDeclaredField(props);
            typeName = field.getType().getName();
            if (typeName.equalsIgnoreCase("boolean")) {
                field.setAccessible(true);
                return field.getBoolean(bean);
            }
    
            methodName = MethodHelper.propsToGetMethod(props);
            Method method = clazz.getDeclaredMethod(methodName);
            return method.invoke(bean);
    
  2. 封装了JsonUtil的方法,将过滤后的数据填充到JsonObject中,以json的格式输出到前端
 /**
     * Created By zby on 9:40 2019/2/13
     * 模拟框架中的数据
     *
     * @param object 参数对象
     * @param props  String类型的变长数组,比如{"id:projectId", "mobile",...}
     *               前半部分是javabean的属性名,后半部分是返回到给客户端的参数名
     */
    public static JSONObject propsFilter(Object object, String... props) {
        //【1】判断对象和变长数组的是否为空,以及变长数组的长度是否为0
        boolean isNull = object == null || (null == props && props.length == 0);
        if (isNull) {
            logger.warn("参数为空object=" + object + "props=" + props);
            return null;
        }
        JSONObject jsonObject = new JSONObject();
        for (String prop : props) {
            //【2】再判断对象不为空,或者长度不为0
            if (prop == null && prop.length() == 0) {
                logger.warn("参数为空prop= " + prop);
                throw new RuntimeException("参数为空prop=" + prop);
            }
            Object o = null;
            String[] namePair = StringUtils.split(prop, ":");
            try {
                o = PropertyUtil.getProperty(object, namePair[0]);
            } catch (Exception e) {
                logger.warn("类" + object.getClass() + ",属性" + namePair[0] + "不存在");
            }
            String key = namePair.length <= 1 ? namePair[0] : namePair[1];
            if (o instanceof Date)
                jsonObject.put(key, DateUtil.simpleFormate((Date) o));
            else if (o instanceof BigDecimal)
                jsonObject.put(key, CommonUtil.toFiexd((BigDecimal) o, 2));
            else if (o instanceof TitleEnum)
                jsonObject.put(key, CommonUtil.builderEnum((TitleEnum) o));
            else
                jsonObject.put(key, o);
        }
        return jsonObject;
    }

安装教程

该项目是基于idea的Java语言开发的框架,所有,确保电脑已经安装了idea和jdk等。

测试说明

       @Test
       public void test(){
               Address address = new Address();
               address.setAddressTag(AddressTagEnum.ADDRESS_TAG_COMPANY);
               address.setArea("杭州市....");
               address.setConsignee("zby");
   
               User user = new User();
               user.setHobby(HobbyEnum.HOBBY_DANCING);
               user.setGender("男");
               user.setUserName("蒋三");
   
               OrderSnapshot orderSnapshot = new OrderSnapshot();
               orderSnapshot.setAddress(address);
               orderSnapshot.setId(1L);
               orderSnapshot.setName("复读机");
               orderSnapshot.setOrderNo(Long.valueOf(System.currentTimeMillis()).toString() + "1L");
               orderSnapshot.setUser(user);
               String[] json = {"address.consignee:consignee","user.hobby:hobby","address.addressTag:addressTag",
                       "address.area:area","address.consignee:consignee","user.userName:userName"};
               System.out.println(JsonUtil.propsFilter(orderSnapshot, json));
           }
           
           结果是:
           {
                "area":"杭州市....",
                "consignee":"zby",
                "addressTag":{
                                "value":"公司",
                                "key":"ADDRESS_TAG_COMPANY"
                              },
                "userName":"蒋三",
                "hobby":{
                            "value":"跳舞",
                            "key":"HOBBY_DANCING"
                         }
           }

空文件

简介

我们在实际开发的过程中,需要将几个Javabean对象,糅合成一个json对象,返回给前台,这时,就需要过滤数据。我们使用的commons-beanutils这个框架,于是,自己看了源码后,仿写了这个框架。于是,把这个框架贡献出来,供大家学习使用。 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化