前言
使用spring boot参数验证是常常会使用@NotNull、@NotBlank和@NotEmpty三个判断是否不为空的注解,中文都有不能为空的意思,大部分使用者都傻傻分清它们之间到底有什么区别。今天就让咱们来一起探索它们之间的不同吧。
说明
注解名称 | 功能 |
---|---|
@NotNull | 可用于所有类型的字段,判断字段不能为null |
@NotBlank | 只能用于String类型的字段,判断字段不能为空串或空白(空格或制表符)字符串 |
@NotEmpty | 可用于String类型和集合类型,用在String字段上时,字段不能为空串;用于集合时,集合不能为null或集合的size不为0 |
共同点:三个注解标注的字段都不能为null
举例
实体User.java
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* @Description TODO
* @Author liqinglong
* @DateTime 2024-04-30 11:02
* @Version 1.0
*/
@Data
public class User {
@NotBlank(message = "姓名不为空")
private String userName;
@NotNull(message = "年龄不能为空")
private Integer age;
@NotEmpty(message = "权限列表不能空")
private List<String> rolerList;
}
测试类 ValidTest.java
import com.ruoyi.common.exception.ServiceException;
import org.apache.commons.collections.CollectionUtils;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @Description TODO
* @Author liqinglong
* @DateTime 2024-04-30 11:07
* @Version 1.0
*/
public class ValidTest {
public static void main(String[] args) {
// Bean 验证器
ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
Validator validator = vf.getValidator();
User user = new User();
//姓名为空格或制表符
user.setUserName(" ");
//年龄为null
user.setAge(null);
//权限集合的长度为0
List<String> roles = new ArrayList<>();
user.setRolerList(roles);
// 校验的业务对象:user,Bean 类型:User
Set<ConstraintViolation<User>> checkSet = validator.validate(user);
if (CollectionUtils.isNotEmpty(checkSet)) {
// Bean验证不通过
throw new ServiceException(checkSet.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(",")));
}
}
}
运行结果:
其它各种情况,请同学自行测试,测试得出的结论欢迎到评论区留言。