SpringBoot使用Hibernate-validator框架
1. 简介
在我们的日常开发中,后台从前台获取的数据是要经过校验之后才可以往后执行,如果每次在代码的内部手写校验的话,会导致代码的冗余而且会显得很杂乱,这时候我们的Hibernate-validator后台校验框架就应运而生了
2.使用
2.1.传递对象
首先创建一个springboot项目,由于spring-boot-starter-web包里面有hibernate-validator包,就不需要导包了
创建一个用户实体
@NotNull(message = "用户名不能为空")
@Length(min= 3,max = 6,message = "用户名长度在3-6位之间")
private String username;
@NotNull(message = "密码不能为空")
@Length(min=3,max = 6,message = "密码长度在3-6位之间")
private String password;
上述在分别在属性上添加了非空和长度校验的注解,再写一个注册的方法,方法中传递了一个对象时
//校验失败的信息存在result对象中
public String register(@Valid User user, BindingResult result){
if(result.hasFieldErrors()){ //如果校验有错那么这里就返回的是true
//获取所有的校验错误的信息存在集合中
List<FieldError> fieldErrors = result.getFieldErrors();
for (FieldError f:fieldErrors) {
//这里就可以知道是那个校验出错了
String fieldName = f.getField(); //校验出错的key的名字
String message = f.getDefaultMessage();
logger.info("校验错的属性是:"+fieldName+“错误信息:”+message);
}
}
return "请求完成";
}
2.2.传递多个参数
1、第一步定义一个配置类支持对多个参数的校验
@Bean
public MethodValidationPostProcessor methodValidationPostProcessor(){
return new MethodValidationPostProcessor();
}
2、第二步在校验的类上加上@Validated 注解 如:
@RestController
@Validated
public class UserController
3、编写方法
@RequestMapping("test2")
public String test2(@NotNull(message = "用户名不能为空") @Length(min=3,max = 6,message = "用户名长度在3-6位之间") String username,
@NotNull(message = "密码不能为空") @Length(min=3,max=6,message = "密码长度在3-6位之间") String password){
return "yese";
}
在如上的使用中我们将注解全都写一块了,代码的可读性不高,可以将其写成复合注解,在这就不多写了
3.Hibernate-invalidator的校验模式
普通模式:会校验所有的属性,并且返回校验错误的所有信息
快速校验模式:只要其中有一个校验没通过,就直接返回,后面的不用校验了
可以看作是&和&&
@Bean
public Validator validator(){
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)
.configure()
//true:快速校验模式 false:普通模式
.addProperty("Hibernate.validator.fail_fast", "true")
.buildValidatorFactory();
return validatorFactory.getValidator();
}
4.分组校验
在不同的请求中需要用到的属性也是不同的,这时就可以使用分组校验,首先定义两个空接口
public interface Register{}
public interface Login{}
然后在实体类中表面哪个属性需要在哪个分组中进行校验
@NotNull(message = "用户名不能为空",groups = {Register.class, Login.class})
private String userName;
在方法里面添加上@Validated表明属于哪个组
public String register(@Validated(Register.class) User user, BindingResult result){
...
}
public String login(@Validated(Login.class) User user, BindingResult result){
...
}
5.常见的注解
@Null 元素必须为null
@NotNull 元素不能为null
@AssertTrue 元素的值必须为true
@Assertfalse 元素必须为false
@Min 元素的值必须是一个数字
@DecimalMin 元素的值必须大于等于最小值
@Max 元素的值必须是一个数字
@DecimalMax 元素的值必须小于等于最大值
@Size :表示的是元素的大小在指定的范围内
@Past :表示的是元素的值 必须是一个过期的时间
@Future:表示的是元素的值 必须在一个将来的时间
@Pattern(rex=xxx) :正则表达式校验
@Notblack 字符串非null 长度必须大于0
@Email :邮箱格式判断
@length :长度判断
@NotEmpty :字符串非空
@Range :表示的是元素必须在指定的范围内
以上就是今天对hibernate-invalidator的简单理解了。