咱们有时须要对前端传过来的数据作校验,就能够使用spring validation。他能够使咱们不用在每一个Controller编写校验代码,能够达到解耦的功能。本文环境为jdk8,框架使用springboot 2.1.0.RELEASE。前端
添加依赖java
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency>
须要被校验的实体类git
@Data public class LoginVo { @Size(min=6,max = 12,message = "用户名不符合规范") String username; @NotBlank(message = "密码不能为空") String password; }
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.若是前端传来的数值不符合标准,后端会报错,因此咱们能够编写一个全局异常类来捕获这个参数绑定异常,从而给前端返回提示消息spring
@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.验证
前端:
后端:
如图,后端捕获了异常,并向前端返回了提示信息
6.咱们还能够使用分组功能,是变量在某些场景须要被验证,而不是全部场景,增长灵活性。后端