5. 在开发中自建的工具类 -- 长期更新版

发布时间 2024-01-11 16:10:20作者: 即溶咖啡粉

前言

在Java开发中,会出现一些常见且通用的业务逻辑. 毫无疑问,上述业务逻辑的解决方法将其抽象为一个工具类方法是常见的思路.这样既可以提升代码的复用性, 也可以提升代码的可维护性!

参数中的某些字段为空的校验方法

源码:

    /**
     * 仅仅以下字段内容不能为空
     * @param entity        实体
     * @param excludeFields 字段
     */
    public static <T> void thisAloneIsNotEmpty(T entity, String... excludeFields) {
        // 仅仅以下字段内容不能为空
        String fields = checkNullFields(entity, false, excludeFields);
        if (StringUtils.isNotBlank(fields)) {
            throw new ServiceException(ResultCode.PARAMS_NULL, fields);
        }
    }


    /**
     * 检查空字段
     * @param entity        实体
     * @param flag          是排除 否仅过滤该字段
     * @param excludeFields 字段名
     * @return 返回拼接后的空字段
     */
    public static <T> String checkNullFields(T entity, boolean flag, String... excludeFields) {
        Class<?> clazz = entity.getClass();
        Field[] fields = clazz.getDeclaredFields();

        // List<String> excludeList = Arrays.asList(excludeFields);
        List<String> excludeList = new ArrayList<>();
        // 下划线转驼峰
        for (String excludeField : excludeFields) {
            String hump = upperTable(excludeField);
            excludeList.add(hump);
        }
        // 错误集合
        LinkedList<String> list = new LinkedList<>();
        for (Field field : fields) {
            if (flag) {
                if (excludeList.contains(field.getName())) {
                    continue;
                }
                try {
                    field.setAccessible(true);
                    Object value = field.get(entity);
                    if (StringUtils.isBlank(value)) {
                        list.add("Field " + field.getName() + " is null");
                    }
                } catch (IllegalAccessException e) {
                    list.add("Field " + field.getName() + " error");
                }
            } else {
                if (excludeList.contains(field.getName())) {
                    field.setAccessible(true);
                    try {
                        Object value = field.get(entity);
                        if (StringUtils.isBlank(value)) {
                            list.add("Field " + field.getName() + " is null");
                        }
                    } catch (IllegalAccessException e) {
                        list.add("Field " + field.getName() + " error");
                    }
                }
            }
        }
        return String.join(",", list);
    }


    /**
     * 下划线转驼峰
     */
    public static String upperTable(String str) {
        StringBuilder result = new StringBuilder();
        String[] a = str.split("_");
        for (String s : a) {
            if (!str.contains("_")) {
                result.append(s);
                continue;
            }
            if (result.length() == 0) {
                result.append(s.toLowerCase());
            } else {
                result.append(s.substring(0, 1).toUpperCase());
                result.append(s.substring(1).toLowerCase());
            }
        }
        return result.toString();
    }