转载

使用jsr303规范验证数据

我们有时需要对前端传过来的数据做校验,就可以使用spring validation。他可以使我们不用在每个Controller编写校验代码,可以达到解耦的功能。本文环境为jdk8,框架使用springboot 2.1.0.RELEASE。

  1. 添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
  2. 需要被校验的实体类

    @Data
    public class LoginVo {
    
        @Size(min=6,max = 12,message = "用户名不符合规范")
        String username;
        @NotBlank(message = "密码不能为空")
        String password;
    }
  3. Controller层,在参数Login前加上@Validated注解,表明需要spring对其进行校验

    public JSONResult registerOrLogin(@Validated LoginVo loginVo)
    JSR提供的校验注解:
    @Null   被注释的元素必须为 null    
    @NotNull    被注释的元素必须不为 null    
    @AssertTrue     被注释的元素必须为 true    
    @AssertFalse    被注释的元素必须为 false    
    @Min(value)     被注释的元素必须是一个数字,其值必须大于等于指定的最小值    
    @Max(value)     被注释的元素必须是一个数字,其值必须小于等于指定的最大值    
    @DecimalMin(value)  被注释的元素必须是一个数字,其值必须大于等于指定的最小值    
    @DecimalMax(value)  被注释的元素必须是一个数字,其值必须小于等于指定的最大值    
    @Size(max=, min=)   被注释的元素的大小必须在指定的范围内    
    @Digits (integer, fraction)     被注释的元素必须是一个数字,其值必须在可接受的范围内    
    @Past   被注释的元素必须是一个过去的日期    
    @Future     被注释的元素必须是一个将来的日期    
    @Pattern(regex=,flag=)  被注释的元素必须符合指定的正则表达式 
    Hibernate Validator提供的校验注解:  
    @NotBlank(message =)   验证字符串非null,且长度必须大于0    
    @Email  被注释的元素必须是电子邮箱地址    
    @Length(min=,max=)  被注释的字符串的大小必须在指定的范围内    
    @NotEmpty   被注释的字符串的必须非空    
    @Range(min=,max=,message=)  被注释的元素必须在合适的范围内

4.如果前端传来的数值不符合标准,后端会报错,所以我们可以编写一个全局异常类来捕获这个参数绑定异常,从而给前端返回提示消息

@ControllerAdvice
@ResponseBody
public class GlobalExceptionHandler {

    @ExceptionHandler(value = Exception.class)//拦截所有异常
    public JSONResult exceptionHandler(HttpServletRequest request, Exception e){
        e.printStackTrace();
         if(e instanceof BindException) {
            BindException ex = (BindException)e;
            List<ObjectError> errors = ex.getAllErrors();//绑定错误返回很多错误,是一个错误列表,只需要第一个错误
            ObjectError error = errors.get(0);
            String msg = error.getDefaultMessage();
            return JSONResult.errorMsg("用户名或密码格式错误");
        }else {
            return JSONResult.errorMsg("未知错误");
        }

    }
}

5.验证

前端:

使用jsr303规范验证数据

后端:

使用jsr303规范验证数据

如图,后端捕获了异常,并向前端返回了提示信息

6.我们还可以使用分组功能,是变量在某些场景需要被验证,而不是所有场景,增加灵活性。

原文  https://segmentfault.com/a/1190000019680403
正文到此结束
Loading...