反射将对象所有属性(含集合中所有属性)中字符串类型做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);
    }
}
原文地址:https://www.cnblogs.com/yifanSJ/p/15224315.html