Spring自带的一些判断工具类

本文介绍了如何在Spring框架中利用Assert、ObjectUtils、StringUtils和CollectionUtils等工具类进行参数的空值验证、类型判断和集合操作,提升代码健壮性与可读性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写代码的时候经常回出现或者返回空的情况,这时候相较于自己写,可以使用Spring自带的工具类来判断,为了避免忘记我就记了下来

1、Assert

// 要求参数 object 必须为非空(Not Null),否则抛出异常,不予放行
// 参数 message 参数用于定制异常信息。
void notNull(Object object, String message)
// 要求参数必须空(Null),否则抛出异常,不予『放行』。
// 和 notNull() 方法断言规则相反
void isNull(Object object, String message)
// 要求参数必须为真(True),否则抛出异常,不予『放行』。
void isTrue(boolean expression, String message)
// 要求参数(List/Set)必须非空(Not Empty),否则抛出异常,不予放行
void notEmpty(Collection collection, String message)
// 要求参数(String)必须有长度(即,Not Empty),否则抛出异常,不予放行
void hasLength(String text, String message)
// 要求参数(String)必须有内容(即,Not Blank),否则抛出异常,不予放行
void hasText(String text, String message)
// 要求参数是指定类型的实例,否则抛出异常,不予放行
void isInstanceOf(Class type, Object obj, String message)

2、处理对象、数组、集合

ObjectUtils
获取对象的基本信息

// 获取对象的类名。参数为 null 时,返回字符串:"null" 
String nullSafeClassName(Object obj)
// 参数为 null 时,返回 0
int nullSafeHashCode(Object object)
// 参数为 null 时,返回字符串:"null"
String nullSafeToString(boolean[] array)
// 获取对象 HashCode(十六进制形式字符串)。参数为 null 时,返回 0 
String getIdentityHexString(Object obj)
// 获取对象的类名和 HashCode。 参数为 null 时,返回字符串:"" 
String identityToString(Object obj)
// 相当于 toString()方法,但参数为 null 时,返回字符串:""
String getDisplayString(Object obj)

判断工具

// 判断数组是否为空
boolean isEmpty(Object[] array)
// 判断参数对象是否是数组
boolean isArray(Object obj)
// 判断数组中是否包含指定元素
boolean containsElement(Object[] array, Object element)
// 相等,或同为 null时,返回 true
boolean nullSafeEquals(Object o1, Object o2)
/*
判断参数对象是否为空,判断标准为:
    Optional: Optional.empty()
       Array: length == 0
CharSequence: length == 0
  Collection: Collection.isEmpty()
         Map: Map.isEmpty()
 */
boolean isEmpty(Object obj)

3、StringUtils

字符串判断工具

// 判断字符串是否为 null,或 ""。注意,包含空白符的字符串为非空
boolean isEmpty(Object str)
// 判断字符串是否是以指定内容结束。忽略大小写
boolean endsWithIgnoreCase(String str, String suffix)
// 判断字符串是否已指定内容开头。忽略大小写
boolean startsWithIgnoreCase(String str, String prefix) 
// 是否包含空白符
boolean containsWhitespace(String str)
// 判断字符串非空且长度不为 0,即,Not Empty
boolean hasLength(CharSequence str)
// 判断字符串是否包含实际内容,即非仅包含空白符,也就是 Not Blank
boolean hasText(CharSequence str)
// 判断字符串指定索引处是否包含一个子串。
boolean substringMatch(CharSequence str, int index, CharSequence substring)
// 计算一个字符串中指定子串的出现次数
int countOccurrencesOf(String str, String sub)

这个一般感觉就第一个用到的次数是比较多的

4、CollectionUtils

集合判断工具

// 判断 List/Set 是否为空
boolean isEmpty(Collection<?> collection)
// 判断 Map 是否为空
boolean isEmpty(Map<?,?> map)
// 判断 List/Set 中是否包含某个对象
boolean containsInstance(Collection<?> collection, Object element)
// 以迭代器的方式,判断 List/Set 中是否包含某个对象
boolean contains(Iterator<?> iterator, Object element)
### 使用 `validated` 工具类对实体类进行验证 为了使用 `validated` 校验工具类对实体类进行验证,通常会结合 Spring 的 `Validator` 接口以及 Hibernate Validator 提供的注解来进行操作。下面是一个完整的示例,展示了如何配置并应用这些组件。 #### 配置依赖项 首先,在项目中引入必要的 Maven 或 Gradle 依赖: 对于 Maven 用户: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> ``` 对于 Gradle 用户: ```groovy implementation 'org.springframework.boot:spring-boot-starter-validation' ``` 这一步骤确保了可以利用内置的支持来简化参数和对象约束验证过程[^1]。 #### 定义实体类 创建一个简单的 Java 类作为待验证的对象模型,并在其属性上添加相应的 JSR-303 注解用于指定校验规则: ```java import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; public class SysUser { @NotBlank(message = "用户名不能为") private String username; @Email(message = "邮箱地址格式错误") private String email; // Getters and Setters... } ``` 上述代码片段定义了一个名为 `SysUser` 的实体类,其中包含了两个带有不同类型的校验条件的字段:一个是不允许为字符串(`@NotBlank`);另一个则是必须遵循标准电子邮件格式 (`@Email`)[^2]。 #### 编写服务层逻辑 接下来编写业务处理方法,在这里注入默认的 `Validator` 实现并通过它执行具体的验证工作: ```java @Service public class UserService { @Autowired protected Validator validator; /** * 导入用户信息前先做合法性检查. */ public void importUser(SysUser user) throws ConstraintViolationException { BeanValidators.validateWithException(validator, user); System.out.println("Validation passed!"); } } ``` 这段程序说明了怎样在一个具体的服务函数内部调用 `BeanValidators.validateWithException()` 方法完成对传入参数的有效性评估。一旦发现任何违反既定规则的情况便会抛出异常终止流程继续向下走。 #### 自定义校验器 (可选) 除了依靠框架自带的基础类型外还可以自定义更加复杂的业务场景下的特殊需求。比如针对某个特定领域内的唯一性判断或是复合型组合关系等复杂情况,则可以通过扩展接口来自行开发对应的处理器件: ```java package com.example.validators; import org.hibernate.validator.constraint.AbstractConstraintValidator; // 继承抽象基类实现自己的验证逻辑 public class UniqueUsernameValidator extends AbstractConstraintValidator<UniqueUsername, String> { @Override public boolean isValid(String value, ConstraintValidatorContext context){ // 查询数据库或其他存储介质确认给定值是否已存在 return !userRepository.existsByUsername(value); } } // 关联到目标属性上的注解声明方式如下所示 @Target({ ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = UniqueUsernameValidator.class) public @interface UniqueUsername { String message() default "该用户名已被占用"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; } ``` 以上部分介绍了当遇到较为特殊的验证要求时应该如何构建个性化的解决方案[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值