SpringBoot使用Hibernate-validator校验的学习

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 :表示的是元素必须在指定的范围内

扫描二维码关注公众号,回复: 9615975 查看本文章

以上就是今天对hibernate-invalidator的简单理解了。

发布了11 篇原创文章 · 获赞 6 · 访问量 195

猜你喜欢

转载自blog.csdn.net/X_Q_B_J/article/details/104488908
今日推荐