jsr303校验主要是通过注解的方法对注入的实体类是否符合规则进行校验,例如,一个name字段数据,如果我们再controller方法中需要进行判断该属性的长度为2-10个长度,这原始的代码需要写成
if(null==name){
}else if(name<3){
return "长度过短";
}else if(name.length()>10){
return "长度过长";
}
这只是才一个字段的校验规则,就需要这么多的if…else进行判,如果加上其他字段的判段呢,age,email,telphone,等等,则需要写上听过的if…else进行判断;如果是jsr303进行校验则会简便许多。只需要再实体类中添加需要校验规则的注解即可实现。
jsr303依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
实体类注解,关键是 对应校验规则注解,和类中的@Valid注解
@Data
@Builder
@Valid
@NoArgsConstructor
public class User {
@NotEmpty
long id;
@Range(min = 10,max = 100,message = "长度不符合规则")
String userName;
@Email
String email;
long phoneNumber;
String description;
}
测试:
User user=new User();
//这里我设置长度为1,和上面的注解定义的长度不相符会报错。
user.setUserName("1");
不符合规则,程序报错如下
Error:(18, 1) java: 无法将类 com.example.demo.entity.User中的构造器 User应用到给定类型;
需要: 没有参数
找到: long,java.lang.String,java.lang.String,long,java.lang.String
原因: 实际参数列表和形式参数列表长度不同
常见的JSR303注解()
注解 功能
@Notnull 验证对象是否不为mul,无法检査长度为0的字符串,于验证基本数据类型
@Null 验证对象是否为null
@AssertTrue 验证 Boolean对象是否为true
@AssertFalse 验证 Boolean对象是否为false
@Max(value) 验正Number和String对象是否小于等于指定的值
@Min(value) 验正Number和String对象是否大于等于指定的值
@DecimalMax(value) 被标注的值必须不大于约束中指定的最大值。这个约束的参数是一个通过 Big Decimal定义的最大值的字符串表示,小数存在精度
@DecimalMin(value) 被标注的值必须不小于约束中指定的最小值。这个约束的参数是一个通过 Big Decimal定义的最小值的字符串表示,小数存在精度
@Digits(integer, fraction) 验证字符串是否是符合指定格式的数字, Interger指定整数精度, fraction指定小数精度
@Size(min, max) 验证对象(Array、Collection、Map、 String)长度是否在给定的范围之内
@Past 验证Date和 Calendar对象是否在当前时间之前
@Future 验证Date和 Calendar对象是否在当前时间之后
@Pattern 验证 String对象是否符合正则表达式的规则
@NotBlank 检查约束字符串是不是Null,被Trim的长度是否大于0。只对字符串,且会去掉前后空格
@URL 验证是否是合法的url
@Email 验证是否是合法的邮件地址
@CreditCardNumber 验证是否是合法的信用卡号码
@Length(min, max) 验证字符串的长度必须在指定的范围内
@NotEmpty 检査元素是否为NULL或者 EMPTY。用于Array、Collection、Map、 String
@Range(min, max, message) 验证属性值必须在合适的范围内