SpringBoot @Validated注解实现参数分组校验的方法实例

  

<强>前言

  

在前后端分离开发的时候我们需要用到参数校验,前端需要进行参数校验,后端接口同样的也需要,以防传入不合法的数据。

  

1,首先还是先导包,导入pom文件。

        & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-validation   & lt;/dependency>   之前      

2,解释一下注解的作用

  
  

@Null限制只能为空
  @NotNull限制必须不为空
  @NotEmpty只作用于字符串类型,字符串不为空,并且长度不为0
  @NotBlank只作用于字符串类型,字符串不为空,并且修剪()后不为空串
  @AssertFalse限制必须为假
  @AssertTrue限制必须为真实
  @DecimalMax(值)限制必须为一个不大于指定值的数字
  @DecimalMin(值)限制必须为一个不小于指定值的数字
  @Digits(整数、分数)限制必须为一个小的数,且整数部分的位数不能超过整数,小数部分的位
  数不能超过分数
  @Future限制必须是一个将来的日期
  @Past验证注解的元素值(日期类型)比当前时间早
  @Max(值)限制必须为一个不大于指定值的数字
  @Min(值)限制必须为一个不小于指定值的数字
  @Pattern(值)限制必须符合指定的正则表达式
  @(最大值、最小值)限制字符长度必须在最小到最大之间
  验证注解的元素值是电子邮件,也可以通过正则表达式和旗帜指定自定义的邮件格式

     

3,在实体类加上要验证的字段。(我这里随便写下)

  

 SpringBoot @Validated注解实现参数分组校验的方法实例

  

标注的地方就是用来分组校验的,下下面会解释。

        @ data   公开课LoginVo {      @ApiModelProperty(值=" https://www.yisu.com/zixun/用户名称”)   @NotEmpty(消息="用户名不能为空! ",组=LoginModel.class)   @NotEmpty(消息="添加时用户名不能为空! ",组=SaveModel.class)   私人字符串的用户名;      @ApiModelProperty(值=" https://www.yisu.com/zixun/密码”)   @ (min=2,消息="密码最少为2位”,组=LoginModel.class)   @ (min=6、消息="密码最少为6位”,组=SaveModel.class)   私人密码字符串;   }   之前      

通过群体的属性来分组,假设我在使用登录分组校验的时候,设定用户名不能为空和密码最少为2位的验证。而在添加分组设定添加时用户名不能为空和密码最少为6位的验证。

  

4,在来解释下上面标注的分组接口。

  

LoginModel         进口javax.validation.groups.Default;   公共接口LoginModel扩展默认{   }      之前      

必须继承默认的Defaut接口不然后抛出异常。

  

SaveModel         进口javax.validation.groups.Default;   公共接口SaveModel扩展默认{   }   之前      

5,在控制器的接口上加上@Validated注解,参数就加上你需要根据那种规则来校验。

        @ApiOperation(值=" https://www.yisu.com/zixun/登录以后返回令牌”)   @PostMapping (value=" https://www.yisu.com/login ")   公共结果登录(@RequestBody @Validated (LoginModel.class) LoginVo LoginVo) {   字符串标记=userService.login (loginVo.getUserName (), loginVo.getPassword ());   返回Result.success(令牌);   }   之前      

运行后只能在控制台显示错误的结果,新的问题又来了怎么把错误的结果通过自己的结果类返回给前端。这就需要对错误全局捕捉了。

  

6,写一个对响应换回结果的处理。

        @RestControllerAdvice   @Slf4j   公开课ParameterCalibration {      @ExceptionHandler ({MethodArgumentNotValidException。类,BindException.class})   @ResponseStatus (HttpStatus.OK)   @ResponseBody   公共结果handleMethodArgumentNotValidException(例外的例外){   StringBuilder errorInfo=new StringBuilder ();   BindingResult BindingResult=零;   如果(异常instanceof MethodArgumentNotValidException) {   bindingResult=((MethodArgumentNotValidException)例外).getBindingResult ();   }   如果(异常instanceof BindException) {   bindingResult=((BindException)例外).getBindingResult ();   }   for (int i=0;我& lt;.size bindingResult.getFieldErrors () ();我+ +){   如果我比;0){   errorInfo.append (", ");   }   FieldError FieldError=bindingResult.getFieldErrors () . get(我);   errorInfo.append (fieldError.getField ())。追加(“:”).append (fieldError.getDefaultMessage ());   }   log.error (errorInfo.toString ());//这里返回自己的结果的结果类。   返回Result.validateFailed (errorInfo.toString ());   }      @ExceptionHandler (Exception.class)   @ResponseStatus (HttpStatus.BAD_REQUEST)   @ResponseBody   公共结果handleDefaultException(例外的例外){   log.error (exception.toString ());//这里返回自己的结果的结果类。   返回Result.validateFailed(“服务器错误”,例外);   }   }   

SpringBoot @Validated注解实现参数分组校验的方法实例