Guava中Preconditions校验

简介: 本文介绍了如何在Java中使用Guava库的Preconditions类进行参数校验,提供了详细的代码示例和常用的校验方法列表。

场景引入

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

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

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

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

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

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

if (StringUtils.isBlank(userLoginDTO.getPhone())) {
   
    // ...
}
if (StringUtils.isBlank(userLoginDTO.getCode())) {
   
    // ...
}
if (StringUtils.isBlank(userLoginDTO.getPassword())) {
   
    // ...
}

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

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

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

Guava 参数校验 Preconditions

pom 依赖引入

<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
相关文章
|
6月前
重试工具Guava-Retryer
使用Guava Retrying库进行重试机制的示例:首先在项目中引入依赖,然后通过RetryerBuilder创建Retryer实例,设置重试条件(如:结果为null或出现特定异常),并配置停止策略和等待策略。代码示例展示了当模拟操作失败一定次数后,最终成功执行的情况。Guava Retrying提供多种重试条件,如基于异常或自定义断言,并支持配置重试次数和间隔时间。
125 5
|
缓存 Java API
Java工具篇之Guava-retry重试组件
Guava 是一组来自 Google 的核心 Java 库,其中包括新的集合类型(例如 multimap 和 multiset)、不可变集合、图形库以及用于并发、I/O、散列、缓存、原语、字符串等的实用程序!它广泛用于 Google 内部的大多数 Java 项目,也被许多其他公司广泛使用。 API 非常的简单,我们可以非常轻松的使用,来封装成我们业务中自己的组件。
937 0
|
4月前
|
缓存 Java Spring
Guava缓存工具类封装和使用
Guava缓存工具类封装和使用
119 0
|
5月前
|
Java Spring 容器
详解java参数校验之:顺序校验、自定义校验、分组校验(@Validated @GroupSequence)
详解java参数校验之:顺序校验、自定义校验、分组校验(@Validated @GroupSequence)
|
5月前
|
缓存 Java Maven
深入解析Google Guava库与Spring Retry重试框架
深入解析Google Guava库与Spring Retry重试框架
|
6月前
|
消息中间件 存储 缓存
Guava的这些骚操作让我的代码量减少了50行
Guava的这些骚操作让我的代码量减少了50行
45 3
|
前端开发 Java 数据库
Spring Entity数据校验,分组校验,返回校验结果给前端
Spring Entity数据校验,分组校验,返回校验结果给前端
98 0
|
6月前
|
存储 缓存 NoSQL
Guava 缓存详解及使用
Guava Cache 是`Google Fuava`中的一个内存缓存模块,用于将数据缓存到JVM内存中。 本文主要介绍下Guava缓存的配置详解及相关使用 缓存分为本地缓存与分布式缓存。本地缓存为了保证线程安全问题,一般使用`ConcurrentMap`的方式保存在内存之中,而常见的分布式缓存则有`Redis`,`MongoDB`等。
【读代码】Guava的CacheLoader
【读代码】Guava的CacheLoader
98 0
|
消息中间件 缓存 JavaScript
Guava的这些骚操作,让我的代码量减少了50%
Guava的这些骚操作,让我的代码量减少了50%