Spring Validation数据校验组件

1 简介

Spring ValidationSpring Framework的一部分,用于对客户端传递到服务端的参数进行校验,用于判定请求参数的合法性。

2 常见注解

我们在使用Spring Validation对客户端传递的参数进行校验时,通常会借助如下相关注解,对服务端接收客户端参数的对象进行描述。

  • @NotNull:用于验证字段对象是否为 null
    @NotNull(message = "用户名不能为null")
  • @NotEmpty:用于验证字符串是否为空,并且会检查是否为 null 值(为null值时报错)
    @NotEmpty(message = "用户名不能为null、空字符串")
  • @NotBlank:不允许是“仅由空格、TAB等空白值组成的字符串”,也不允许为空字符串,也不允许为空值null
    @NotBlank(message = "用户名不能为null、空字符串和空白串")
  • @Size:检查字符串长度或集合大小。
    @Size(min = 6, max = 20, message = "用户名长度必须在6到20之间")
  • @Range:检查数值范围。
    @Range(min = 1, max = 10, message = "年龄必须在1-10岁之间")
    @Range(min = 0.1, max = 1.0, message = "成绩必须在0.1到1.0之间")
  • @Email:检查字符串是否符合电子邮件格式。
  • @Pattern:检查字符串是否符合正则表达式模式。
    @Pattern(regexp = "^[\\u4e00-\\u9fa5]{0,7}$|^[a-zA-Z]{0,14}$", message = "用户名不能超过7个汉字或14个英文字符")

3 快速入门实现[POJO参数校验]

  • 第1步:在项目中添加验证依赖[创建工程时可勾选]
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • 第2步:在POJO类型的参数上添加@Validated注解,表示需要通过Spring Validation框架检查此参
@ApiOperation(value = "注册功能")
@PostMapping("reg")
public JsonResult reg(@RequestBody @Validated UserRegParam userRegParam){}
  • 第3步:在POJO类属性上,添加对应的验证注解,以配置验证规则;
@Data
public class UserRegParam {
    @Pattern(regexp = "^[\\u4e00-\\u9fa5]{0,7}$|^[a-zA-Z]{0,14}$", message = "用户名不能超过7个汉字或14个英文字符")
    private String username;
    ...
    ...
}
  • 第4步:在全局异常处理类中定义异常处理方法
    • 第4.1步: 自定义枚举状态码
      VALIDATE_ERROR(3002, "参数校验失败")
    • 第4.2步: 定义异常处理方法
      在处理异常时,需要调用MethodArgumentNotValidException对象的getFieldError().getDefaultMessage()获取以上配置的描述文本
@ExceptionHandler
public JsonResult handleBindException(MethodArgumentNotValidException ex){
    /*
            ex.getFieldError().getDefaultMessage():获取 @NotNull(message="xxx") 中message的消息
    */
    String message = ex.getFieldError().getDefaultMessage();
    return new JsonResult(StatusCode.VALIDATE_ERROR, message);
}

4 非pojo参数校验

Spring Validation中,除了对 POJO(Plain Old Java Object)进行校验的功能外,还支持对非 POJO进行校验。

4.1 使用流程

  • 第1步:在当前方法所在的类上添加 @Validated 注解
  • 第2步:在参数上添加对应的检查注解

4.2 应用实践

对于删除车辆功能的 id 参数进行范围校验,范围只能在200-300之间

  • 第1步:在Controller类上添加 @Validated 注解,例如:
@Validated
public class VehicleController {}
  • 第2步:在Controller类方法参数添加校验注解的描述,例如:
@PostMapping("del/{id}")
public JsonResult deleteVehicle(@PathVariable @Range(min = 200, max=300, message = "请提交合法的ID值!") Long id, @ApiIgnore HttpSession session){}
  • 第3步:在全局异常处理类中添加异常处理方法
@ExceptionHandler
public JsonResult handleConstraintViolationException(ConstraintViolationException e) {
    String data = ex.getMessage();
    return new JsonResult(StatusCode.VALIDATE_ERROR, data);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容