SpringBoot--数据校验(普通校验、分组校验)
普通校验
普通检验是基础⽤法,⾮常容易,⾸先需要⽤户在SpringBootWeb项⽬中添加数据校验相关的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
查看LocalValidatorFactoryBean类的源码,发现默认的ValidationMessageSource(校验出错时的提⽰⽂件) 是resources⽬录下的ValidationMessages.properties ⽂件,因此在resources⽬录下创建ValidationMessages.properties⽂件,内容如下:
user.name.size=⽤户名长度介于5到10个字符之间
ull=⽤户地址不能为空
user.age.size=年龄输⼊不正确
创建User类,配置数据校验:
public class User {
private Integer id;
@Size(min =5, max =10, message ="{user.name.size}")
private String name;
@NotNull(message ="{ull}")
private String address;
@DecimalMin(value ="1", message ="{user.age.size}")
@DecimalMax(value ="200", message ="{user.age.size}")
private Integer age;
@Email(message ="{ail.pattern}")
@NotNull(message ="{ull}")
private String email;
//省略getter和setter
}
@Size表⽰⼀个字符串的长度或者⼀个集合的⼤⼩,必须在某⼀个范围中;min参数表⽰范围的下限;max参数表⽰范围的上限;
message表⽰校验失败时的提⽰信息。
@NotNull注解表⽰该字段不能为空
@DecimalMin注解表⽰对应属性值的下限
@DecimalMax注解表⽰对应属性值的上限
@Email注解表⽰对应属性格式是⼀个Email
创建UserController:
@RestController
public class UserController {
@PostMapping("/user")
public List<String>addUser(@Validated User user, BindingResult result){
List<String> errors =new ArrayList<>();
if(result.hasErrors()){
List<ObjectError> allErrors = AllErrors();
for(ObjectError error : allErrors){
errors.DefaultMessage());
}
}
return errors;
}
}
给User参数添加@Validated注解,表⽰需要对该参数做校验,紧接着的BindingResult参数表⽰在校验出错时保存的出错信息。
如果BindingResult中的haiErrors⽅法返回true,表⽰有错误信息,此时遍历错误信息,将之返回给前端
使⽤Postman测试:
直接访问"/user"接⼝:
传⼊⽤户地址、⼀个⾮法邮箱地址以及⼀个格式不正确的⽤户名:
分组校验
有的时候,开发者在某⼀个实体类中定义了很多校验规则,但是在某⼀次业务处理中,并不需要这么多校验规则,此时就可以使⽤分组校验:
⾸先创建两个分组接⼝:
public interface ValidationGroup1 {
}
public interface ValidationGroup2 {
}
在实体类中添加分组信息:
public class User {
private Integer id;
//groups属性,表⽰该校验属性规则所属的分组
@Size(min =5, max =10, message ="{user.name.size}", groups = ValidationGroup1.class)
private String name;
@NotNull(message ="{ull}", groups = ValidationGroup2.class)
private String address;
@DecimalMin(value ="1", message ="{user.age.size}")
@DecimalMax(value ="200", message ="{user.age.size}")
private Integer age;
@Email(message ="{ail.pattern}")
@NotNull(message ="{ull}", groups ={ValidationGroup1.class, ValidationGroup2.class})
private String email;
}
在@Validated注解中指定校验分组:
@RestController
public class UserController {
//@Validated(ValidationGroup2.class) 表⽰这⾥的校验使⽤ValidationGroup2分组的校验规则,即只校验邮箱地址是否为空、⽤户地址是否为空 @PostMapping("/user")
public List <String > addUser (@Validated(ValidationGroup2.class ) User user , BindingResult result ){
List <String > errors = new ArrayList <>();
if (result .hasErrors ()){
List <ObjectError > allErrors = result .getAllErrors ();
for (ObjectError error : allErrors ){
errors .add (error .getDefaultMessage ());
}
}
return errors ;
}
}测试:
校验注解
校验注解
注解的元素类型描述AssertFalse
Boolean、boolean 被注解的元素值必须为false AssertTrue Boolean、boolean
被注解的元素值必须为true DecimalMax BigDecimal、BigInteger、
CharSequence、byte、short、int、long以
及它们各⾃的包装类
被注解的元素值⼩于等于@DecimalMax注解中的value值DecimalMin BigDecimal、BigInteger、
CharSequence、byte、short、int、long以
及它们各⾃的包装类
被注解的元素值⼤于等于@decimalMin注解中的value值Max BigDecimal、BigInteger、byte、short、
int、long以及它们各⾃的包装类
被注解的元素值⼩于等于@Max注解中的value值Min BigDecimal、BigInteger、byte、short、
int、long以及它们各⾃的包装类
被注解的元素值必须⼤于等于@Min注解中的value值Digits BigDecimal、BigInteger、
CharSequence、byte、short、int、long以被注解的元素必须是⼀个数字,其值必须在可接受的范围内(整数位数和⼩数位数在
bigdecimal取值范围指定范围内)
及它们各⾃的包装类
Email CharSequence被注解的元素值必须是Email格式
Future java.util.Date、java.util.Calendar以及
java.time包下的时间类
被注解的元素值必须是⼀个未来的⽇期
Past java.util.Date、java.util.Calendar以及
java.time包下的时间类
被注解的元素值必须是⼀个过去的⽇期
PastOrPresent java.util.Date、java.util.Calendar以及
java.time包下的时间类
被注解的元素值必须是⼀个过去的⽇期或者当前⽇期
FutureOrPresent java.util.Date、java.util.Calendar以及
java.time包下的时间类
被注解的元素值必须是⼀个未来的⽇期或者当前的⽇期
Negative BigDecimal、BigInteger、byte、short、
int、long以及它们各⾃的包装类
被注解的元素必须是负数
NegativeOrZero BigDecimal、BigInteger、byte、short、
int、long以及它们各⾃的包装类
被注解的元素必须是负数或0
Positive BigDecimal、BigInteger、byte、short、
int、long以及它们各⾃的包装类
被注解的元素必须是正数
PositiveOrZero BigDecimal、BigInteger、byte、short、
int、long以及它们各⾃的包装类
被注解的元素必须是正数或0
NotBlank CharSequence被注解的元素必须不为null并且⾄少有⼀个⾮空⽩的字符
NotEmpty CharSequence、Collection、Map、Array 被注解的字符集不为null或空字符串,被注解的集合或数组不为空。和@NotBlank注解相⽐,⼀个空格字符串在@NotBlank验证不通过,但是在@NotEmpty中验证通过
NotNull任意类型被注解的元素不为null
Null任意类型被注解的元素为null
Pattern CharSequence被注解的元素必须符合指定的正则表达式
Size CharSequence、Collection、Map、Array被朱的字符串长度、集合或者数组的⼤⼩必须在指定范围内校验注解注解的元素类型描述
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论