zoukankan      html  css  js  c++  java
  • 反射将对象所有属性(含集合中所有属性)中字符串类型做trim()

    通过反射将对象所有属性(含属性为集合类型中的所有属性)中字符串类型做trim()处理

    public class FieldUtils {
        /**
         * 字符串 字符 去除 首位空格
         *
         * @param model
         * @throws Exception
         */
        public static void removeSpace(Object model) throws Exception {
            Class clazz = model.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                if (!field.isAccessible()) {
                    field.setAccessible(true);
                }
    
                //如果为字符串类型
                if (field.getGenericType().toString().equals("class java.lang.String")) {
                    Method getMethod = clazz.getMethod("get" + getMethodName(field.getName()));
                    String value = (String) getMethod.invoke(model);// 调用getter方法获取属性值
                    if (StringUtils.isNotBlank(value)) {
                        value = value.trim();
                        field.setAccessible(true);
                        field.set(model, value);
                    }
                }
                //如果为集合类型
                if (List.class.isAssignableFrom(field.getType())) {
                    Type t = field.getGenericType();
                    if (t instanceof ParameterizedType) {
                        Object object = field.get(model);
                        if (ObjectUtil.isEmpty(object)) {
                            continue;
                        }
                        Class clazz1 = object.getClass();//获取到属性的值的Class对象
                        Method m = clazz1.getDeclaredMethod("size");
                        int size = (Integer) m.invoke(field.get(model));//调用list的size方法,得到list的长度
                        for (int i = 0; i < size; i++) {//遍历list,调用get方法,获取list中的对象实例
                            Method getM = clazz1.getDeclaredMethod("get", int.class);
                            if (!getM.isAccessible()) {
                                getM.setAccessible(true);
                            }
                            removeSpace(getM.invoke(field.get(model), i));
                        }
                    }
                }
            }
        }
    
        /**
         * 返回首字母大写
         *
         * @param fildeName
         * @return
         * @throws Exception
         */
        private static String getMethodName(String fildeName) throws Exception {
            byte[] items = fildeName.getBytes();
            items[0] = (byte) ((char) items[0] - 'a' + 'A');
            return new String(items);
        }
    }
  • 相关阅读:
    mac上命令行解压rar
    Mac上安装PHP、Apache、MySQL
    8款不错的 CI/CD工具
    Apache 强制Http跳转Https
    使用MySQL的mysqldump命令备份数据库和把数据库备份文件恢复
    MySQL主从复制和读写分离
    Nginx参数调优
    【原创】深入理解Docker容器和镜像 -- 分析了docker的命令含义
    Elasticsearch使用备忘
    通过HTTP RESTful API 操作elasticsearch搜索数据
  • 原文地址:https://www.cnblogs.com/yifanSJ/p/15224315.html
Copyright © 2011-2022 走看看