首页 > 其他分享 >5. 在开发中自建的工具类 -- 长期更新版

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

时间:2024-01-11 16:14:49浏览次数:24  
标签:excludeFields String -- list entity field result 更新版 中自建

前言

在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();
    }

标签:excludeFields,String,--,list,entity,field,result,更新版,中自建
From: https://www.cnblogs.com/xiusong/p/17958664

相关文章

  • Java递归函数计算递归次数出错
    背景:构造组织架构树时,使用了递归填充子节点,为防止环状的错误数据导致递归无法结束,记录递归的次数,超过一定数量后终止递归问题:用户记录递归次数的变量在节点跳转的时候被重新赋值,无法正确记录 publicDepartgenDepartTreeFromRoot()throwsException{Departroot=De......
  • C++模板例子
    title:"C++模板例子"date:2023-11-02T01:05:25+08:00tags:["C++"]categories:[]draft:false#include<vector>#include<type_traits>usingnamespacestd;classAA{};classBB{};classTest{public:template<cl......
  • APUE-文件I/O
    库函数和系统调用库函数调用系统调用在所有的ANSIC编译器中,C库函数都是相同的各个操作系统的系统调用是不同的,这导致程序不可移植它调用库函数中的一段程序(或函数)它调用系统内核的服务与用户程序相联系在内核地址空间执行它的运行时间属于“用户时间”运......
  • 封装、继承、多态
    封装、继承、多态、反射1.封装封装就是将属性隐藏,不让外界发现或使用将可以允许外界使用的内容通过接口开发,让用户通过接口使用隐藏属性的方法是通过__变量名1.1封装之隐藏属性隐藏数据属性classTeacher:def__init__(self,name,age):#将名字和年纪......
  • 初始化C语言中的复杂声明
    int*(*(*arr[5])())(); float(*(*b())[])(); void*(*c)(char,int(*)()); void**(*d)(int&,char**(*)(char*,char**));float(*(*e[10])(int&))[5];上一篇我们分析过这些声明表示什么意思,今天我们初始化下这些声明int*(*(*arr[5])())......
  • 常用魔法方法和元类
    常用魔法方法和元类1.常用魔法方法__init__ :初始化类时触发__del__ :删除类时触发__new__ :构造类时触发__str__ :str函数或者print函数触发__repr__ :repr或者交互式解释器触发__doc__ :打印类内的注释内容__enter__ :打开文档触发__exit__ :关闭文档触发__getattr__:访......
  • Spring学习记录之GoF之代理模式
    Spring学习记录之GoF之代理模式前言这篇文章是我第二次学习b站老杜的spring相关课程所进行的学习记录,算是对课程内容及笔记的二次整理,以自己的理解方式进行二次记录,其中理解可能存在错误,欢迎且接受各位大佬们的批评指正;关于本笔记,只是我对于相关知识遗忘时快速查阅了解使用,至......
  • [NLP复习笔记] Transformer
    1.Transformer概述1.1整体结构\(\text{Transformer}\)主要由\(\text{Encoder}\)和\(\text{Decoder}\)两个部分组成。\(\text{Encoder}\)部分有\(N=6\)个相同的层,每层包含一个\(\text{Muti-HeadAttention}\)(多头注意力机制,由多个\(\text{Self-Attention}\)组成......
  • div滚动加载数据
    <template><divstyle="border:1pxsolid#ccc;max-height:280px;width:100%;overflow-y:auto;"v-if="recordList.length>0"@scroll="onScroll"><divv-for="(item,index)inrecordList":key=......
  • [转帖]ntp导致的时钟回拨
    https://zhuanlan.zhihu.com/p/587313130 我们的服务器时间校准一般是通过ntp进程去校准的。但由于校准这个动作,会导致时钟跳跃变化的现象。而这种情况里面,往往回拨最能引起我们的困扰,回拨如下所示:  会引起什么问题准点调度任务的误判假设有一个任务每天0点时......