共计 1688 个字符,预计需要花费 5 分钟才能阅读完成。
@Max 可用于数字和字符串(字符串必须为数值型),其值必须小于等于指定的最大值
@Min 可用于数字和字符串(字符串必须为数值型),其值必须大于等于指定的最小值
@Length 可用于字符串,其长度必须在指定的范围内
@Size 可用于字符串、List、数组,其长度必须在指定的范围内
补充:
我们平时开发,只是加上注解这么简单?到底是怎么实现的参数校验?
- 添加两个依赖:
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.2.4.Final</version>
</dependency>
- 具体实现:
import lombok.Data;
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.constraints.Size;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
/**
* @author plm
* @create 2021/2/20 22:56
*/
@Data
class Desk {
@Size(min = 2, max = 5)
private String str1;
@Size(min = 2, max = 3)
private List list1;
@Size(min = 2, max = 3)
private int[] arr1;
}
public class ValidationApiDemo {
public static void main(String[] args) {
Desk desk1 = new Desk();
String[] strings = {"1", "2", "3", "4"};
List<String> list = Arrays.asList(strings);
desk1.setList1(list);
desk1.setStr1("123320");
desk1.setArr1(new int[]{1, 2, 3, 5});
validate(desk1);
}
private static void validate(Desk desk1) {
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<Desk>> validate = validator.validate(desk1);
for (ConstraintViolation<Desk> cv : validate) {
System.out.println(cv.getRootBean().getClass().getName() + "类的"
+ cv.getPropertyPath() + "属性 -> " + cv.getMessage());
}
}
}
/*
com.peiluming.round_1.Desk类的str1属性 -> 个数必须在2和5之间
com.peiluming.round_1.Desk类的list1属性 -> 个数必须在2和3之间
com.peiluming.round_1.Desk类的arr1属性 -> 个数必须在2和3之间
*/
其他常用注解:
@NotNull 被注释的元素不为null
@Valid 递归的对关联对象进行校验
@NotEmpty 被注释的元素不为空(可用于String,Collection,Map,arrays)
@NotBlank 只应用于字符串且在比较时会去除字符串的首位空格
正文完