目錄
- 前言
- 說明
- 舉例
前言
使用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(" ");//年齡為nulluser.setAge(null);//權限集合的長度為0List<String> roles = new ArrayList<>();user.setRolerList(roles);// 校驗的業務對象:user,Bean 類型:UserSet<ConstraintViolation<User>> checkSet = validator.validate(user);if (CollectionUtils.isNotEmpty(checkSet)) {// Bean驗證不通過throw new ServiceException(checkSet.stream().map(ConstraintViolation::getMessage).collect(Collectors.joining(",")));}}
}
運行結果:
其它各種情況,請同學自行測試,測試得出的結論歡迎到評論區留言。