Guava中Preconditions校验

Guava中Preconditions校验

    • 场景引入
    • [Guava 参数校验 Preconditions](#Guava 参数校验 Preconditions)

场景引入

提出疑问?为什么不直接使用 jsr330校验注解对实体类进行校验呢?

答:不同的场景,如短信码验证登录,账号密码登录此类的实体,对于字段是否必填并不是必须的。

java 复制代码
@Data
class UserLoginDTO {
    // @NotBlank(message = "手机号不能为空")
    private String phone;

    // @NotBlank(message = "验证码不能为空")
    private String code;
    
    // @NotBlank(message = "密码不能为空")
    private String password;
}

应对这样的dto实体,只能在业务中进行判空处理,如下面的操作:

java 复制代码
if (StringUtils.isBlank(userLoginDTO.getPhone())) {
    // ...
}
if (StringUtils.isBlank(userLoginDTO.getCode())) {
    // ...
}
if (StringUtils.isBlank(userLoginDTO.getPassword())) {
    // ...
}

如果输入参数少的时候,还好,如果很多就会变成大量的if(判空操作),很不优雅...

此时就可以使用 guava 的 Preconditions来完成上面的判空操作了,如:

java 复制代码
Preconditions.checkArgument(StringUtils.isNotBlank(userLoginDTO.getPhone()), "手机号不能为空");
Preconditions.checkArgument(StringUtils.isNotBlank(userLoginDTO.getCode()), "验证码不能为空");
Preconditions.checkArgument(StringUtils.isNotBlank(userLoginDTO.getPassword()), "密码不能为空");

Guava 参数校验 Preconditions

pom 依赖引入

xml 复制代码
<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>版本号</version>
</dependency

常用的方法

简单的列举Guava中Preconditions类的一些常用校验方法:

方法名 描述 抛出异常
checkArgument(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) 校验方法参数。如果expressionfalse,则抛出IllegalArgumentException IllegalArgumentException
checkNotNull(T reference) 校验reference不为null。如果为null,则抛出NullPointerException NullPointerException
checkNotNull(T reference, String errorMessage) 类似于checkNotNull(T reference),但允许提供一个错误消息 NullPointerException
checkState(boolean expression) 校验程序状态。如果expressionfalse,则抛出IllegalStateException IllegalStateException
checkState(boolean expression, String errorMessageTemplate, Object... errorMessageArgs) 类似于checkArgument,但抛出的是IllegalStateException IllegalStateException
checkElementIndex(int index, int size, String desc) 校验索引是否有效(大于等于0且小于size)。如果无效,则抛出IndexOutOfBoundsException IndexOutOfBoundsException
checkPositionIndex(int index, int size, String desc) 类似于checkElementIndex,但允许索引等于size IndexOutOfBoundsException
checkPositionIndexes(int start, int end, int size, String desc) 校验起始和结束索引是否有效,用于表示子序列范围 IndexOutOfBoundsException
相关推荐
ai旅人1 天前
Guava RateLimiter深度解析:非阻塞令牌桶限流原理与跑批实战
java·限流·guava
西凉的悲伤3 天前
Guava类库——Lists.partition() 高效分批处理列表数据
java·guava
伯恩bourne23 天前
Google Guava:Java 核心工具库的卓越之选
java·开发语言·guava
二月夜2 个月前
告别繁琐的比较器:掌握 Google Guava 的 Ordering 工具类
guava
二月夜2 个月前
深入理解 Guava 新集合类型:超越 JDK 的数据结构利器
guava
文艺倾年2 个月前
【源码精讲+简历包装】LeetcodeRunner—手搓调试器轮子(20W字-上)
java·jvm·人工智能·tomcat·编辑器·guava
shuair2 个月前
guava布隆过滤器及cuckoo过滤器
redis·guava
廋到被风吹走2 个月前
【缓存优化】缓存穿透:布隆过滤器(Guava/RedisBloom)
缓存·guava
xdpcxq10292 个月前
Spring AOP + Guava RateLimiter 用注解实现优雅限流
spring·wpf·guava
ejinxian2 个月前
Google Guava实战
guava·工具库