有做任务赚钱的网站有哪些/职业培训机构管理系统
Validator框架,,它的出现就是为了解决开发人员在开发的时候减少代码的,提升开发效率。它专门用来做接口的参数校验,比如:密码长度、是否为空等等。
在默认情况下:SpringBoot会引入hibernate validation机制来支持JSR-303验证规范。
SpringBoot的validator校验框架支持如下特征:
-
JSR303特征:JSR303是一项标准,只提供规范不提供实现。规定一些校验规范即校验注解。比如:@Null、@NotNull、@Pattern。这些类都位于:
javax.validation.constraints
包下。 -
hibernate validation特征:hibernate validation是对JSR303规范的实现并且进行了增强和扩展。并增加了注解:@Email、@Length、@Range等等。
-
Spring Validation:Spring Validation是对Hibernate Validation的二次封装。在SpringMvc模块中添加了自动校验器。并将校验信息封装到特定的类中。
常见的注解
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,且trim后长度必须大于0
@Email 被注释的元素必须是电子邮箱地址
@Length(min=,max=) 被注释的字符串的大小必须在指定的范围内
@NotEmpty 被注释的字符串的必须非空
@Range(min=,max=,message=) 被注释的元素必须在合适的范围内
spring使用validator
核心步骤概述
在spring框架框架的开发中,只需要两个步骤:
1:在需要校验的bean(entity)中的属性上增加对应注解
2:在springmvc的方法参数中的 entity中加Validated的注解即可。
3:使用全局统一异常处理捕获的验证失败的提示信息
第一步:在pom.xml添加依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId>
</dependency>
第二步:实体类上面结合注解使用
package com.kuangstudy.vo;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.*;
import java.util.Date;@Data
public class UserVo {@NotNull(message = "用户id不能为空")private Long userId;@NotBlank(message = "用户名不能为空")@Length(max = 20, message = "用户名不能超过20个字符")@Pattern(regexp = "^[\\u4E00-\\u9FA5A-Za-z0-9\\*]*$", message = "用户昵称限制:最多20字符,包含文字、字母和数字")private String username;@NotBlank(message = "手机号不能为空")@Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误")private String mobile;@NotBlank(message = "联系邮箱不能为空")@Email(message = "邮箱格式不对")private String email;@Future(message = "时间必须是将来时间")private Date createTime;
}
第三步:在需要校验的参数前面添加@Validated
一般是在控制器方法的入参校验
package com.kuangstudy.controller.validator;
import com.kuangstudy.common.base.R;
import com.kuangstudy.vo.UserVo;
import io.swagger.annotations.Api;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@Api(description = "用户校验")
@RequestMapping("/user")
public class UserValiatorController {@PostMapping("/valiator/reg")public UserVo createUser(@Validated UserVo userVo) {return userVo;}
}
通过前面的全局异常统一处理 + 统一返回 + 校验会得到如下的信息:
如果你校验失败,springmvc的validator内部会以异常的方式进行返回。报错异常:MethodArgumentNotValidException
而这个异常里面,包含所有的校验的提示信息。