前言
使用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(","))); } } }
运行结果:
其它各种情况,请同学自行测试,测试得出的结论欢迎到评论区留言。