26.2.从零开始学springboot-数据校验

SpringBoot业务开发 05、SpringBoot集成JSR303实现参数校验+全局异常捕捉_使用参数校验jsr303如何捕获 Min(value = 0, message = “排序必须要大于等于0”, groups = {AddGroup.class, UpdateGroup.class})@NotBlank(message = “品牌logo地址不能为空”, groups = {AddGroup.class, UpdateGroup.class})@NotBlank(message = “品牌名称不能为空”, groups = {AddGroup.class, UpdateGroup.class}) 阅读详情

前言

对于任何一个应用而言,客户端做的数据有效性验证都不是安全有效的,而数据验证又是一个企业级项目架构上最为基础的功能模块,这时候就要求我们在服务端接收到数据的时候也对数据的有效性进行验证。

JSR-303

JSR 是Java Specification Requests 的缩写,是指向 JCP(Java Community Process) 提出新增一个标准化技术规范的正式请求。
任何人都可以提交 JSR,以向 Java 平台增添新的 API 和服务,已审核通过的规范涉及 Java 各个领域,有兴趣可以了解一下。
Bean Validation 是一个运行时的数据验证框架,为 JavaBean 验证定义了相应的元数据模型和 API。
默认的元数据是 Java Annotations,当然也可以使用 XML 可以对已存在的元数据信息进行覆盖和扩展。
在应用中通过使用 Bean Validation 或是你自己定义的 constraint,例如 @NotNull, @Max, @ZipCode, 就可以确保数据模型的正确性。
constraint 可以注解到字段,getter 方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的 constraint。

检验注解

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=) 被注释的元素必须在合适的范围内

使用

实体类

package com.mrcoder.sbexceptionvalidator.model;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Setter
@Getter
public class Person {
    @NotNull(message = "id非空")
    private Integer id;
    @NotBlank(message = "name非空")
    private String name;
}

控制类

    @PostMapping("/add")
    public ResponseInfo add(@Valid @RequestBody Person person) {
        return ResponseInfo.success("success");
    }

项目地址

https://github.com/MrCoderStack/SpringBootDemo/tree/master/sb-exception-validator

请关注我的订阅号

订阅号.png

springboot 校验机制@Valid 在开发的过程中一直迷惑 @Validated 与 @Valid 的用法,有时候是@Validated ,有时候是@Valid。情景一: 查询参数是一个实体,Get 请求,在不添加任何注解的情况下,查询是正常的,实体参数字段都为""null""@Validated 是spring 核心包,是每个项目都有的,那么 api 是如何引入的?两个注解存在不同的包,而@NotNull ,@Null ,@Size ,@Max 等校验注解是哪里的呢?场景二:@Valida 不管是左右在参数列表还是类上,都无法生效。 阅读详情

相关推荐

Spring Boot 3.x 系列【26】优雅的参数校验

在实际开发项目中,进行参数校验是必不可少的一项工作,当你要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情。必须通过某种手段来确保输入进来的数据从语义上来讲是正确的。常见的数据检查工作包括必填项检查、数值检查、长度检查、身份证号码、手机号码检查等。阿里巴巴开发手册13.【参考】调用频次低的方法。执行时间开销很大的方法。此情形中,参数校验时间几乎可以忽略不计,但如果因为参数错误导中间执行回退,或者错误,那得不偿失。需要极高稳定性和可用性的方法。

记录知识、锤炼自我 1378

SpringBoot服务端表单数据校验

1、首先说明一下,这里使用的是Springboot2.2.6.RELEASE版本,由于Springboot迭代很快,所以要注意版本问题。   SpringBoot对表单做数据校验,SpringBoot对表单数据校验的技术特点,SpringBoot中使用了Hibernate-validate校验框架(SpringBoot的Web启动器中已经包含了Hibernate-validate校验框架的依赖jar包)。 2、SpringBoot表单数据校验步骤。 2.1、第一步,在实体类中添加校验规则,在被校验的实

Biexiansheng的博客 515

第055篇:陆地观测卫星数据服务平台高级检索方法

检索数据检索到肩膀疼,这谁能信?谁能?

liujinli0712的博客 7823

SpringBoot参数校验大全(分组校验、顺序校验、嵌套校验、自定义校验、常用注解校验)

日常开发工作中,少不了对请求参数进行校验,比如进行判空、长度限制等,如果每个参数都进行语句上的逻辑判断,会显得比较复杂,所以这里为大家介绍在SpringBoot开发过程中常用到的参数校验知识。

qq_42914110的博客 3291

AI智能体赋能Cypress:自动化前端测试的新范式

自动化测试是现代软件工程保障质量的核心实践,其原理是通过脚本模拟用户操作,对软件功能进行验证。随着大语言模型(LLM)和智能体(Agent)技术的发展,测试自动化正迈向智能化新阶段。智能体能够理解自然语言描述的测试需求,并自主规划、执行测试步骤,这为应对前端UI频繁变更、测试用例维护成本高等挑战提供了新思路。在工程实践中,将Cypress这一流行的前端测试框架封装为智能体可调用的标准化技能(Skill),是实现这一愿景的关键。通过设计清晰的交互协议和状态管理机制,智能体可以像人类测试工程师一样“感知”页面状

weixin_33726318的博客 684

MICS-6814多气体传感器与ESP32-C3 Mini接口构建空气监测系统

cararenuity C3 Mini的多个ADC引脚,Wi-Fi和蓝牙LE以及紧凑的设计使其成为嵌入式物联网应用的绝佳选择。在这个项目中,我们将把MICS-6814多气体传感器与基于esp32 -C3的开发板cararenuity C3 Mini连接起来。更多模拟引脚:与ESP8266只有一个ADC引脚不同,基于esp32 -C3的cararenuity C3 Mini提供多个ADC引脚,使其成为多传感器应用的理想选择。紧凑可靠:该板的小尺寸使其成为嵌入式应用的理想选择,而不会牺牲性能。

hie98894的博客 769

【SpringBoot框架篇】26.集成spring-boot-starter-validation对接口参数校验

文章目录1.常规验证2.使用validation验证2.1.添加依赖2.2.常用注解2.3.在pojo类中添加需要使用的注解2.4.在接口入参处添加@Valid2.5.添加全局异常处理类返回校验错位提示信息 1.常规验证 以下面的登录接口为例,需要手动去验证参数是否存在,这种写法繁琐且不太优雅。 @RestController public class LoginController { @RequestMapping("/login") public String test(@Reque

皓亮君的博客 2583

WorkBuddy 实战:从聊天窗口到 AI 工作台,打造个人自动化助理

大模型时代,对话式 AI 常被当作高级搜索框,难以沉淀为生产力。其根源在于上下文断裂——每次对话都从零开始。AI Agent 的核心原理是通过状态保持、工具调用与流程复用,将临时交互固化为可重复的协作机制。WorkBuddy 作为个人 AI 工作台,以 Agent + Skill + 工作流架构解决该问题:Skill 封装操作手册,工作区沉淀知识上下文,自定义指令约束输出风格。这种设计让周报生成、会议纪要、文档初稿、专利检索辅助等重复劳动实现流程化自动产出。掌握 WorkBuddy 怎么用,关键在于从自己重

weixin_33834910的博客 325

26.1.从零开始学springboot-全局异常处理

前言 无论什么项目,异常处理和数据校验都显得尤其重要。作为一个开发,我们不应该不对数据检验就直接入库,我们也不应该傻乎乎的把乱糟糟的报错信息直接返回给用户。本章,我们就讲讲sprinboot的异常和数据校验处理。 异常处理流程 自定义异常类型 自定义错误代码及错误信息 对于可预知的异常由程序员在代码中主动抛出,有springboot统一捕获,可预知异常是程序员在代码中手动抛出本系统定义的特定业务...

CTO技术的博客 341

Windows Server安装Intel I219-V网卡驱动完整教程

在Windows Server系统上安装Intel I219-V网卡驱动的方法。

小白成长历程 5171

C++中const和指针*的组合问题

今天在复习> 章节7.3的时候想到以前做的一个题,const和指针运算符*的若干种组合的合法性和意义问题,有点混淆,所以写了一个测试代码来验证一下,简单明了,一目了然。如果有什么遗漏的话欢迎指出。 首先是在Ubuntu14.04.1下用gcc 4.8.4编译运行的结果,编译器报错信息都附加在对应语句后面的注释里 /* * Note : Test for the combinations of

theColdOne的专栏 1080

SpringBoot使用Validation校验参数

SpringBoot使用Validation校验参数

weixin_42495787的博客 3012

OCS2 入门教程(一)

OCS2 是专为切换系统优化控制(ptimalontrol forwitchedystems,OCS2)定制的 C++ 工具箱。该工具箱提供以下算法的高效实现:SLQ:连续时间域约束 DDPiLQR:离散时域约束 DDPSQP:基于 HPIPM 的多重打靶算法IPM: 基于非线性内点法的多重搜索算法SLP:基于 PIPG 的顺序线性规划算法OCS2 通过增强拉格朗日法(Augmented Lagrangian)或松弛障碍法(relaxed barrier methods)处理一般路径约束。

机器人控制与仿真应用 7835

SpringBoot中处理校验逻辑的两种方式

转自:SpringBoot中处理校验逻辑的两种方式,真的很机智! 侵删 平时在开发接口的时候,常常会需要对参数进行校验,这里提供两种处理校验逻辑的方式。一种是使用Hibernate Validator来处理,另一种是使用全局异常来处理,下面我们讲下这两种方式的用法。 一、Hibernate Validator Hibernate Validator是SpringBoot内置的校验框架,只要集成了S...

nic's blog 1099

剪映专业版关键帧完全教程:从原理到实战的动画必修课

关键帧是视频动画的核心原理。视频由连续静止画面(帧)构成,关键帧记录素材属性变化的起始与结束状态,中间过渡帧由软件自动计算生成。剪映专业版中,视频、音频、文本、贴纸等素材均支持关键帧动画,可调节位置、缩放、旋转、不透明度、音量等参数。操作为:在起始位置点击参数旁菱形按钮添加关键帧,移动播放头后调整参数,系统自动生成第二个关键帧。多属性可独立控制并叠加,实现放大同时淡出等复合效果。通过设定变化起点与终点,关键帧能让静止元素产生移动、缩放、淡入淡出等丰富动态,是视频剪辑从基础拼接进阶创意表达的核心技能。掌握关键

深耕计算机专业知识与技术。 2085

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SpringBoot中@Pattern注解对时间格式校验

1.需求背景 有一个需求,在前端传过来的时间格式的字符串进行校验,是否符合"yyyy-MM-dd HH:mm:ss",在SpringBoot中当然可以用@Datetimeformat注解来进行验证,但字段的属性得用Date类型,由于我的项目中该字段用了String类型,需要对类型进行转换不太符合要求,所有用到了@Pattern注解。 在实体类的字段名上添加@Pattern注解,有个属性regexp,该属性的值就是正则表达式。 "yyyy-MM...

x_christ1的博客 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SpringBoot项目(26)---服务器数据校验之其他校验规则

SpringBoot项目(26)—服务器数据校验之其他校验规则 @NotNull判断基本数据类型的对象类型是否为null @NotBlank判断字符串是否为null或者是空集(去掉首尾空集) @NotEmpty判断集合是否为空 @Length判断字符串的长度(最大或者最小) @Length(min = 3,max = 8,message = "最小3,最大8") private String username; @Min判断数值最小值 @Max判断数值最大值 @Email判断邮箱是否合法 ...

weixin_44876147的博客 172

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从零开始 Spring Boot 13:参数校验

我在上篇文章中介绍了如何在SpringBoot构建的Web应用中接收HTTP请求附带的参数。在Web开发中很重要的一点是——不要相信客户端。因为HTTP客户端是位于服务端开发之外的,其安全性是难以掌控的,关于HTTP客户端安全方面最广泛的问题之一就是应当使用Session而非Cookie,因为前者是服务端存储技术,后者是客户端存储技术,而客户端存储的数据更容易被伪造。同样的,客户端发来的请求也应当进行各种形式的安全验证,因为篇幅关系,本文只讨论传入参数的合法性验证。...

梦幻天空 319

bean validation校验方法参数_SpringBoot使用Validation做字段校验(2019-09-26)

SpringBoot使用Validation做字段校验关于字段校验今天在实现SSO登陆,在做单点登录的过程中,对于字段的校验是一个很常用的需求,而今天我使用Validation来完成校验的工作。在Spring3.1后增加的了对JSR303 Bean Validation 规范的支持,JSR 303是JAVA EE 6中的一项子规范,叫做Bean Validation,其实现是参考Hibernate...

weixin_39747630的博客 235

JSR303数据校验

JSR303数据校验,让你的代码变得更“优雅”

apple_52109766的博客 438

参数校验放在controller还是service_SpringBoot中处理校验逻辑的两种方式,真的很机智!...

平时在开发接口的时候,常常会需要对参数进行校验,这里提供两种处理校验逻辑的方式。一种是使用Hibernate Validator来处理,另一种是使用全局异常来处理,下面我们讲下这两种方式的用法。Hibernate Validator Hibernate Validator是SpringBoot内置的校验框架,只要集成了SpringBoot就自动集成了它,我们可以通过在对象上面使用它提供的...

weixin_39631953的博客 1413

springboot项目使用validated参数校验框架

当谈到Spring的参数校验功能时,@Validated注解无疑是一个重要的利器。它为我们提供了一种简单而又强大的方式来验证请求参数的合法性,保证了系统的稳定性和安全性。本文将介绍Spring Validated的基本用法以及在实际项目中的应用。提示:以下是本篇文章正文内容,下面案例可供参考通过本文的学习,读者将深入了解Spring Validated的使用方法和原理,掌握在实际项目中如何有效地利用@Validated注解进行参数校验。

风止的博客 3392

Spring Boot——优雅的参数校验

当我们想提供可靠的 API 接口,对参数的校验,以保证最终数据入库的正确性,是 必不可少 的活。写了一大堆的 if else 进行校验,或者基础校验,如非空校验、长度校验、大小校验、格式校验;也有一些校验是业务校验,如学号不能重重复、手机号不能重复注册等,非常的不优雅,比起枯燥的CRUD来说,参数校验更是枯燥。

Wen先森的博客 1799

SpringBoot中处理校验逻辑的两种方式,真的很机智!

平时在开发接口的时候,常常会需要对参数进行校验,这里提供两种处理校验逻辑的方式。一种是使用Hibernate Validator来处理,另一种是使用全局异常来处理,下面我们讲下这两种方式...

macrozheng的专栏 1385
上一篇: 26.1.从零开始学springboot-全局异常处理
下一篇: 24.从零开始学springboot-swagger2文档自动生成
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值