IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> 对JavaBean的属性进行判空 -> 正文阅读

[开发测试]对JavaBean的属性进行判空

在项目开发中判空是很常见的事,有时候来自前端页面的表单需要挨个判空,如果挨个“null == object”就会变得很臃肿,针对这种情况对判空做个简化。

这是java8的判空方法,一行搞定

 /**
  * 校验参数是否为空
  * @param obj 参数
  * @param message 提示信息
  */
 public static void checkParam(Object obj, String message) {
     Optional.ofNullable(obj).orElseThrow(() -> new RuntimeException(message));
 }

那JavaBean呢?需要获取先获取属性名和属性值,通过下面的两个方法实现

 /**
  * 获取属性类型(type),属性名(name),属性值(value)的map组成的list
  */
 public static List<Map> getFiledsInfo(Object o) {
     Field[] fields = o.getClass().getDeclaredFields();
     String[] fieldNames = new String[fields.length];
     List<Map> list = new ArrayList<>();
     Map<String, Object> infoMap = null;
     for (int i = 0; i < fields.length; i++) {
         infoMap = new HashMap<>();
         infoMap.put("type", fields[i].getType().toString());  //属性类型,判空一般不需要
         infoMap.put("name", fields[i].getName());
         infoMap.put("value", getFieldValueByName(fields[i].getName(), o));
         list.add(infoMap);
     }
     return list;
 }

/**
 * 根据属性名获取属性值
 */
public static Object getFieldValueByName(String fieldName, Object o) {
    try {
        String firstLetter = fieldName.substring(0, 1).toUpperCase();
        String getter = "get" + firstLetter + fieldName.substring(1);
        Method method = o.getClass().getMethod(getter, new Class[]{});
        Object value = method.invoke(o, new Object[]{});
        return value;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}

这是我定义的一个测试类

@Data
public class DCAGPPDFParam {

    //付款账户
    private String payeac;

    //开始日期
    //YYYY-MM-DD 格式
    private String begdat;

    //结束日期
    //YYYY-MM-DD 格式
    private String enddat;

    //业务类型
    //代发工资:N03010, 其他:N03020
    private String buscod;

    //业务模式
    /**
     * 对应业务类型的业务模式,查询的账号需要在该业务模式的可经办账号列表里面
     */
    private String busmod;

    //打印模式
    /**
     * S:逐笔打印:每笔明细生成一个 PDF 文件;M:批量打印:
     * 所有明细生成生成到一个 PDF 文件里面
     */
    private String prtmod;

    //查询标记
    /**
     * 首次查询请输入 0,当返回报文里面有 begidx 返回时表明需要续传,
     * 请将返回报文中的 begidx 值放入该字段继续请求。
     */
    private String begidx;

    //以下开始为非必填字段

    //收方户名
    private String eacnam;

    //业务参考号
    private String ptyref;

    //最小金额
    private String minamt;

    //最大金额
    private String maxamt;

    //每批数量
    /**
     * 默认 1000,最大限制 1000,打印模式为 M 时表示一个文件里面包含的明细的条数,
     * 打印模式为 S 时表示一次可以查询明细的条数。
     */
    private String pagsiz;
}

通过“getFiledsInfo”方法很容易获取JavaBean的属性名称、值、类型
在这里插入图片描述
再者对JavaBean的属性挨个判空就可以了,通过下面这个方法实现

/**
 * 校验javabean,传其他类型的对象可能会报错
 * @param obj  校验的javabean
 * @param emptyFiledList 可以为空的属性集合,没有传null
 * @param message  在为空的基础上,前面添加的提示信息,没有传null
 */
public static void checkBean(Object obj, List<String> emptyFiledList, String message) {
    checkParam(obj, (StringUtils.isBlank(message) ? "对象" : message) + "为空!");

    //传入为空属性集合为null表示当前集合所有属性都不能为空,但为了做校验,emptyFiledList也不能为null
    //在这里做校验可以减少http请求
    emptyFiledList = null != emptyFiledList ? emptyFiledList : new ArrayList<>();

    List<Map> objectInfoList = ReflectHelper.getFiledsInfo(obj);

    for (Map objectInfo : objectInfoList) {
        String name = (String) objectInfo.get("name"); //对象属性名,属性名都是字符串

        //可以为空的属性不做校验
        if (!emptyFiledList.contains(name)) {

            //校验对象属性值是否为空
            checkParam(objectInfo.get("value"), (StringUtils.isBlank(message) ? "对象的" : message + "的") + "【" + name + "】属性为空!");
        }
    }
}

最后做个测试
在这里插入图片描述
搞定,接下来可以对项目中的表单的判空做个简化了。

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 23:43:15  更:2022-04-01 23:43:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:41:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码