Spring的Validation,这是一套基于注解的权限校验框架

为了保证数据的正确性、完整性,作为一名后端开发工程师,不能仅仅依靠前端来校验数据,还需要对接口请求的参数进行后端的校验。

controller

全局异常处理器

在项目中添加一个全局异常处理器,处理校验异常

java 复制代码
@RestControllerAdvice
public class CommonExceptionHandler {

    @ExceptionHandler(ConstraintViolationException.class)
    public void handConstraintViolationException(ConstraintViolationException e) {
        e.getConstraintViolations().forEach(v -> {
            System.out.println("错误字段:" + v.getPropertyPath() + ",错误消息:" + v.getMessage());
        });
    }

    @ExceptionHandler(BindException.class)
    public void handBindException(BindException e) {
        e.getFieldErrors().forEach(v->{
            System.out.println("错误字段:"+v.getField() + ",错误消息:" + v.getDefaultMessage());
        });
    }
}

常用注解

空值

  • @Null 可以标注在任意类型元素上,被标注的元素必须为null
  • @NotNull 可以标注在任意类型元素上,被标注的元素必须不能为null,但是可以为空串
  • @NotBlank 可以标注在字符串类型上,被标注的元素不能为null,也不能为空串
  • @NotEmpty 可以标注在字符串、集合、数组、map类型上 被标注的元素值不为null,也不能为空集合或者空串
java 复制代码
@Null //可以标注在任意类型元素上, 被标注的元素必须为null
private Long id;

//@NotNull //可以标注在任意类型元素上, 被标注的元素必须不能为null,但是可以为空串
//@NotBlank //可以标注在字符串类型上,被标注的元素不能为null,也不能为空串
@NotEmpty(message="姓名不能为空")
private String name;

@NotEmpty //可以标注在字符串、集合、数组、map类型上   被标注的元素值不为null,也不能为空集合或者空串
private List<String> friends;

数值

  • @Min(value) 被标注的元素必须是一个数字,其值必须大于等于指定的最小值,对于null无效
  • @Max(value) 被标注的元素必须是一个数字,其值必须小于等于指定的最大值,对于null无效
  • @Range(min=,max=) 被标注的字符串的大小必须在指定的范围内,对于null无效
  • @Digits(integer = 3,fraction = 2) 验证数值的精度
java 复制代码
 //@Min(1) //被标注的元素必须是一个数字,其值必须大于等于指定的最小值,对于null无效
    //@Max(200) //被标注的元素必须是一个数字,其值必须小于等于指定的最大值,对于null无效
    @Range(min = 1,max = 200)//标注的字符串的大小必须在指定的范围内,对于null无效
    private Integer age;

    @Digits(integer = 3,fraction = 2)//验证数值的精度
    private Float salary;

长度

@Size(min=,max) 可以标注在字符串、数组、集合、map上,用于控制数组等长度

@Length(min=,max=) 可以标注在字符串上,被标注的字符串的大小必须在指定的范围内

java 复制代码
@Size(min = 1,max = 2) //可以标注在字符串、数组、集合、map上,用于控制数组等长度
private List<String> friends;

@Length(min = 11,max = 11) //用于控制字符串长度
private String phone;

其它

  • @AssertTrue 被标注的元素必须为true
  • @AssertFalse 被标注的元素必须为false
  • @Email 被标注的元素必须是电子邮箱地址
  • @URL 被标注的元素必须是一个正确的网址
  • @Past 被标注的元素必须是一个过去的日期
  • @Future 被标注的元素必须是一个将来的日期
  • @Pattern(value) 被标注的元素必须符合指定的正则表达式
java 复制代码
//@AssertTrue	//被标注的元素必须为true
@AssertFalse  //被标注的元素必须为false
private Boolean isAdmin;//是否为管理员

@Email	//被标注的元素必须是电子邮箱地址
private String mail;

@URL   //被标注的元素必须是一个正确的网址
private String picture;

@Past	//被标注的元素必须是一个过去的日期
//@Future	//被标注的元素必须是一个将来的日期
private Date birthday;

级联校验

一个类中带着另一个类

分组校验

  • 矛盾点:有的属性在不同的需求下会有不同的校验规则 ,新增id为空和修改时id不能为空
  • 解决方案:分组校验

定义组

使用组

相关推荐
全栈小刘2 分钟前
ChatGPT账号打通OpenClaw?Codex又整了个“电子宠物”,开发者这下真坐不住了
后端
小龙报9 分钟前
【Coze-AI智能体平台】低代码省时高效:Coze 应用开发全流程指南
java·人工智能·python·深度学习·低代码·chatgpt·交互
陈随易14 分钟前
bun将会支持Bun.image,你怎么看?
前端·后端·程序员
念何架构之路23 分钟前
Go Web基础和Http演进
开发语言·后端·golang
勿忘初心122125 分钟前
【Java实战】SpringBoot 集成 freemarker 导出 Word 模板
java·spring boot·freemarker·模板引擎·word导出·后端实战
绿草在线31 分钟前
SpringBoot项目实战:从零搭建高效开发环境
java·spring boot·后端
J2虾虾33 分钟前
Java Lambda 表达式详解文档
java·开发语言
longxibo38 分钟前
【第1章 环境搭建与项目结构解析】
java·后端·流程图
a***728939 分钟前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
Java成神之路-44 分钟前
面试题:Spring AOP底层实现原理
java·spring aop