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不能为空
- 解决方案:分组校验
定义组
使用组
相关文章:

Spring的Validation,这是一套基于注解的权限校验框架
为了保证数据的正确性、完整性,作为一名后端开发工程师,不能仅仅依靠前端来校验数据,还需要对接口请求的参数进行后端的校验。 controller 全局异常处理器 在项目中添加一个全局异常处理器,处理校验异常 RestControllerAdvice p…...

MySQL - 如何突破单库性能瓶颈
数据库服务器硬件优化 我们来看看对数据库所在的服务器是如何进行优化的,服务器是数据库的宿主,其性能直接影响了数据库的性能,所以服务器的优化也是数据库优化的第一步。 数据库服务器通常是从 CPU、内存、磁盘三个角度进行硬件优化的&…...
基于 Vue 和 Node.js 实现图片上传功能:从前端到后端的完整实践
在开发一个社交分享平台时,图片上传功能是核心需求之一。本文将基于一个旅拍社交分享系统,详细解析其图片上传功能的实现原理和技术细节,包括前端处理、后端接收和数据库存储等环节。 1. 前端图片上传实现 在这个项目中,图片上传…...
go封装将所有数字类型转浮点型,可设置保留几位小数
封装转换方法 /* * * 将类型转浮点型,并保留小数 ToFloat(123, 2) ToFloat(3.5254, 0) */ func ToFloat(value interface{}, precision int) (float64, error) {var f float64var err errorswitch v : value.(type) {case float64:f vcase float32:f float64(v)c…...
Rust 学习笔记:关于 Vector 的练习题
Rust 学习笔记:关于 Vector 的练习题 Rust 学习笔记:关于 Vector 的练习题哪个调用会报错?以下代码能否通过编译?若能,输出是?以下代码能否通过编译?若能,输出是?以下代码…...
Linux 系统异常触发后自动重启配置指南
Linux 系统异常触发后自动重启配置指南 一、内核级自动重启配置 适用于内核崩溃(Kernel Panic)、硬件驱动故障等场景,通过 SysRq 和 Watchdog 实现快速恢复。 1. SysRq 强制重启 功能:通过触发内核崩溃或强制重启,绕…...

apisix透传客户端真实IP(real-ip插件)
文章目录 apisix透传客户端真实IP需求和背景apisix real-ip插件为什么需要 trusted_addresses?安全架构的最佳实践 示例场景apisix界面配置 apisix透传客户端真实IP 需求和背景 当 APISIX 前端有其他反向代理(如 Nginx、HAProxy、云厂商的 LBÿ…...

Oracle 数据库的默认隔离级别
Oracle 数据库的默认隔离级别 默认隔离级别:READ COMMITTED Oracle 默认使用 读已提交(READ COMMITTED) 隔离级别,这是大多数OLTP(在线事务处理)系统的标准选择。 官方文档 https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/da…...
统计客户端使用情况,使用es存储数据,实现去重以及计数
这篇文件的重点在tshark、filebeat、和logstash。 需求:统计客户使用的客户端版本 实现工具:tshark 1.10.14,filebeat 8.17.0,logstash 8.17.0,elasticsearch 8.17.0,kibana 8.17.0 总体设计:…...

代码随想录算法训练营第六十四天| 图论9—卡码网47. 参加科学大会,94. 城市间货物运输 I
每日被新算法方式轰炸的一天,今天是dijkstra(堆优化版)以及Bellman_ford ,尝试理解中,属于是只能照着代码大概说一下在干嘛。 47. 参加科学大会 https://kamacoder.com/problempage.php?pid1047 dijkstra(…...
oracle序列自增问题
1.先查询表名对应的序列名称 SELECT trigger_name, trigger_type, triggering_event FROM all_triggers WHERE table_name 表名;2. 查询id最大值 SELECT MAX(ID) FROM 表名;3. 查询下一次生成ID SELECT SJCJ_ENERGY_DATA_INSERTID.NEXTVAL FROM DUAL;4. 设置临时步长,越过…...

开启健康生活的多元养生之道
健康养生是一门值得终身学习的学问,在追求健康的道路上,除了常见方法,还有许多容易被忽视却同样重要的角度。掌握这些多元养生之道,能让我们的生活更健康、更有品质。 室内环境的健康不容忽视。定期清洁空调滤网,避…...

【Vite】前端开发服务器的配置
定义一些开发服务器的行为和代理规则 服务器的基本配置 server: {host: true, // 监听所有网络地址port: 8081, // 使用8081端口open: true, // 启动时自动打开浏览器cors: true // 启用CORS跨域支持 } 代理配置 proxy: {/api: {target: https://…...
鸿蒙OSUniApp 制作自定义弹窗与模态框组件#三方框架 #Uniapp
UniApp 制作自定义弹窗与模态框组件 前言 在移动应用开发中,弹窗和模态框是用户交互的重要组成部分,它们用于显示提示信息、收集用户输入或确认用户操作。尽管 UniApp 提供了基础的交互组件如 uni.showModal() 和 uni.showToast(),但这些原…...

Spring Security与Spring Boot集成原理
Spring Security依赖的是过滤器机制,首先是web容器例如tomcat作为独立的产品,本身有自己的一套过滤器机制用来处理请求,那么如何将tomcat接收到的请求转入到Spring Security的处理逻辑呢?spring充分采用了tomcat的拓展机制提供了t…...

VScode各文件转化为PDF的方法
文章目录 代码.py文件.ipynb文本和代码夹杂的文件方法 1:使用 VS Code 插件(推荐)步骤 1:安装必要插件步骤 2:安装 `nbconvert`步骤 3:间接导出(HTML → PDF)本文遇见了系列错误:解决方案:问题原因步骤 1:降级 Jinja2 至兼容版本步骤 2:确保 nbconvert 版本兼容替代…...
精益数据分析(58/126):移情阶段的深度实践与客户访谈方法论
精益数据分析(58/126):移情阶段的深度实践与客户访谈方法论 在创业的漫长旅途中,正确识别和验证问题是成功的第一步。今天,我们继续围绕《精益数据分析》中创业阶段的核心内容,深入探讨移情阶段的关键实践…...

Vue3学习(组合式API——Watch侦听器、watchEffect()详解)
目录 一、Watch侦听器。 (1)侦听单个数据。 (2)侦听多个数据。(数组写法?!) (3)immediate参数。(立即执行回调) (3)deep参数。(深层监…...

【node.js】安装与配置
个人主页:Guiat 归属专栏:node.js 文章目录 1. Node.js简介1.1 Node.js的特点1.2 Node.js架构 2. Node.js安装2.1 下载和安装方法2.1.1 Windows安装2.1.2 macOS安装2.1.3 Linux安装 2.2 使用NVM安装和管理Node.js版本2.2.1 安装NVM2.2.2 使用NVM管理Node…...

《AI大模型应知应会100篇》第62篇:TypeChat——类型安全的大模型编程框架
第62篇:TypeChat——类型安全的大模型编程框架 摘要 在构建 AI 应用时,一个常见的痛点是大语言模型(LLM)输出的不确定性与格式不一致问题。开发者往往需要手动解析、校验和处理模型返回的内容,这不仅增加了开发成本&a…...
HttpMessageConverter 的作用是什么? 它是如何实现请求体到对象、对象到响应体的自动转换的(特别是 JSON/XML)?
HttpMessageConverter (HTTP 消息转换器) 是 Spring MVC 框架中一个非常核心的组件,它的主要作用是在 HTTP 请求和响应体与 Java 对象之间进行双向转换。 核心作用: 读取请求体 (Request Body) 到 Java 对象: 当 Controller 方法的参数使用 …...

EdgeShard:通过协作边缘计算实现高效的 LLM 推理
(2024-05-23) EdgeShard: Efficient LLM Inference via Collaborative Edge Computing (EdgeShard:通过协作边缘计算实现高效的 LLM 推理) 作者: Mingjin Zhang; Jiannong Cao; Xiaoming Shen; Zeyang Cui;期刊: (发表日期: 2024-05-23)期刊分区:本地链接: Zhang 等 - 2024 …...

火山 RTC 引擎9 ----集成 appkey
一、集成 appkey 1、网易RTC 初始化过程 1)、添加头文件 实现互动直播 - 互动直播 2.0网易云信互动直播产品的基本功能包括音视频通话和连麦直播,当您成功初始化 SDK 之后,您可以简单体验本产品的基本业务流程,例如主播加入房间…...
ArcGIS Pro 3.4 二次开发 - 框架
环境:ArcGIS Pro SDK 3.4 .NET 8 文章目录 框架1 框架1.1 如何在 DockPane 可见或隐藏时订阅和取消订阅事件1.2 执行命令1.3 设置当前工具1.4 激活选项卡1.5 激活/停用状态 - 修改条件1.6 判断应用程序是否繁忙1.7 获取应用程序主窗口1.8 关闭 ArcGIS Pro1.9 获取 …...

Adminer:一个基于Web的轻量级数据库管理工具
Adminer 是一个由单个 PHP 文件实现的免费数据库管理工具,支持 MySQL、MariaDB、PostgreSQL、CockroachDB、SQLite、SQL Server、Oracle、Elasticsearch、SimpleDB、MongoDB、Firebird、Clickhouse 等数据库。 Adminer 支持的主要功能如下: 连接数据库服…...

RK3568下QT实现按钮切换tabWidget
运行效果: 在 Qt 应用程序开发过程中,TabWidget 是一种非常实用的 UI 组件,它能够以选项卡的形式展示多个页面内容,帮助我们有效组织和管理复杂的界面布局。而在实际使用时,常常会有通过按钮点击来切换 TabWidget 页面的需求,本文将通过一个完整的示例,详细介绍如何在 Q…...

2025 OceanBase 开发者大会全议程指南
5 月 17 日,第三届 OceanBase 开发者大会将在广州举办。 我们邀请数据库领军者与AI实践先锋,与开发者一起探讨数据库与 AI 协同创新的技术趋势,面对面交流 OceanBase 在 TP、AP、KV 及 AI 能力上的最新进展,深度体验“打破技术栈…...
GitHub 趋势日报 (2025年05月15日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1TapXWorld/ChinaTextbookPDF教材。⭐ 6685⭐ 15287Roff2xming521/WeClone&…...

day017-磁盘管理-实战
文章目录 1. 硬盘命名规则2. 添加硬盘2.1 查看硬盘名称 3. 硬盘分区3.1 分区命名规则:mbr分区表格式3.2 创建分区:fdisk3.2.1 fdisk -l:查看硬盘及分区信息3.2.2 fdisk /dev/sdc :为该硬盘分区3.2.3 创建扩展分区和逻辑分区3.2.4 保存设置并退…...

【成品设计】STM32和UCOS-II的项目
项目1:《基于STM32和UCOS-II的水质监测系统》 Ps:分为带系统版本和不带系统版本,功能都一样。 功能说明: 1. 单片机主控:STM32F103C8T6单片机作为核心控制。 2. 酸碱度传感器:实时采集当前PH值。 3. 水质…...