当前位置: 首页 > article >正文

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

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

controller

 全局异常处理器

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

@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,也不能为空集合或者空串
@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) 验证数值的精度
 //@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=) 可以标注在字符串上,被标注的字符串的大小必须在指定的范围内

@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) 被标注的元素必须符合指定的正则表达式
//@AssertTrue	//被标注的元素必须为true
@AssertFalse  //被标注的元素必须为false
private Boolean isAdmin;//是否为管理员@Email	//被标注的元素必须是电子邮箱地址
private String mail;@URL   //被标注的元素必须是一个正确的网址
private String picture;@Past	//被标注的元素必须是一个过去的日期
//@Future	//被标注的元素必须是一个将来的日期
private Date birthday;

级联校验

一个类中带着另一个类

分组校验

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

定义组

使用组

http://www.lryc.cn/news/2380436.html

相关文章:

  • MySQL - 如何突破单库性能瓶颈
  • 基于 Vue 和 Node.js 实现图片上传功能:从前端到后端的完整实践
  • go封装将所有数字类型转浮点型,可设置保留几位小数
  • Rust 学习笔记:关于 Vector 的练习题
  • Linux 系统异常触发后自动重启配置指南
  • apisix透传客户端真实IP(real-ip插件)
  • Oracle 数据库的默认隔离级别
  • 统计客户端使用情况,使用es存储数据,实现去重以及计数
  • 代码随想录算法训练营第六十四天| 图论9—卡码网47. 参加科学大会,94. 城市间货物运输 I
  • oracle序列自增问题
  • 开启健康生活的多元养生之道
  • 【Vite】前端开发服务器的配置
  • 鸿蒙OSUniApp 制作自定义弹窗与模态框组件#三方框架 #Uniapp
  • Spring Security与Spring Boot集成原理
  • VScode各文件转化为PDF的方法
  • 精益数据分析(58/126):移情阶段的深度实践与客户访谈方法论
  • Vue3学习(组合式API——Watch侦听器、watchEffect()详解)
  • 【node.js】安装与配置
  • 《AI大模型应知应会100篇》第62篇:TypeChat——类型安全的大模型编程框架
  • HttpMessageConverter 的作用是什么? 它是如何实现请求体到对象、对象到响应体的自动转换的(特别是 JSON/XML)?
  • EdgeShard:通过协作边缘计算实现高效的 LLM 推理
  • 火山 RTC 引擎9 ----集成 appkey
  • ArcGIS Pro 3.4 二次开发 - 框架
  • Adminer:一个基于Web的轻量级数据库管理工具
  • RK3568下QT实现按钮切换tabWidget
  • 2025 OceanBase 开发者大会全议程指南
  • GitHub 趋势日报 (2025年05月15日)
  • day017-磁盘管理-实战
  • 【成品设计】STM32和UCOS-II的项目
  • 当通过PHP在线修改文件数组遇到不能及时生效问题