原创

简述spingboot中的Assert工具类(断言工具类)

作者:cndz 围观群众:651 更新于 标签:spring bootAssert断言spring boot 工具类

问题发现

代码走查看到一位新入职的同事用到了一堆if来判断参数是否合规。比如下面这样。当然并不是说下面这种写法不对。但是过多的使用if会降低代码可读性。其实对于这种情况使用断言写起来更好一点。

@PostMapping("/employInfo")
public ResResult employee(Integer id){
    if (null==id) {
       return ApiResponse.fail("id不能为空");
    }
    Employee emp = empService.getById(id);
    if(null == emp){
        return ApiResponse.fail("员工信息不存在");
    }
   //查询员工信息逻辑
    return ApiResponse.success("查询成功",emp);
}

概念

断言:断言(assertion)是一种在程序中的一阶逻辑(如:一个结果为真或假的逻辑判断式),目的为了表示与验证软件开发者预期的结果——当程序执行到断言的位置时,对应的断言应该为真。若断言不为真时,程序会中止执行,并给出错误信息。

spring boot 项目中的断言工具类

Spring Boot 提供了一个名为 Assert 的工具类,用于执行断言操作。这个工具类提供了一组静态方法,可以对输入数据进行验证,并在验证失败时抛出异常。Assert 工具类的常用方法包括:

  • notNull():判断对象是不为null,如果为null抛出IllegalArgumentException异常。
  • isNull();判断对象是null,如果不是null则抛出IllegalArgumentException异常。
  • hasLength();判断字符串不为null或者不为空串(字符串长度大于0)。否则抛出IllegalArgumentException异常。
  • hasText():判断字符串是否为非空字符串(去除首位空格后长度大于0)。否则抛出IllegalArgumentException异常。
  • isTrue():判断表达式是否为 true。如果不是则抛出IllegalArgumentException异常
  • state():判断表达式是否为 true。如果不是则抛出IllegalStateException异常(类似于isTrue只是抛出的异常不同)
  • notEmpty();判断数组或集合是否为空,如果是空则抛出IllegalArgumentException异常。

使用这些方法可以方便地进行参数校验和业务逻辑校验,避免代码中大量的 if-else 判断。同时,Spring Boot 还提供了一个 assertThat() 方法,可以基于 Hamcrest 匹配器库进行更加灵活的验证操作。

回到最初的问题。如果使用断言来处理可以写成下面这样(下方省略异常捕获)。

@PostMapping("/employInfo")
public ResResult employee(Integer id){
    Assert.notNull(id,"员工id不能为空");
    Employee emp = empService.getById(id);
    Assert.notNull(emp,"");
    return ApiResponse.success("员工信息不存在",emp);
}