Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring Validation 详解

Spring Validation 详解

作者头像
浪漫主义狗
发布于 2024-08-15 06:21:51
发布于 2024-08-15 06:21:51
17700
代码可运行
举报
文章被收录于专栏:HAUE_LYS'BlogHAUE_LYS'Blog
运行总次数:0
代码可运行

校验框架

SpringBoot 的 Validation:

  • Spring Boot中的验证功能是基于Java Bean Validation(Jakarta Validation)规范的
  • Spring Boot 通过 spring-boot-starter-validation 自动配置,实际使用的是 Hibernate Validator 作为其实现

Java Bean Validation:

  • Java Bean Validation 是JSR 303和JSR 380的一个执行标准(早期是JSR303,更新后是JSR380)
  • 定义了一套用于对象属性验证的 API 和注解,这个标准本身不提供具体的实现,只定义了规范
  • 在Java EE技术迁移到 Jakarta EE 之后,Java Bean Validation 变成了 Jakarta Validation

Hibernate Validator:

  • Hibernate Validator 是 Jakarta Validation 规范的参考实现
  • 它提供了该规范的完整实现,并且扩展了部分功能,使得验证更加灵活和强大

综上所述,SpringBoot 的 Validation 实际执行的是 Hibernate Validator,通过 Jakarta Validation API 对其进行了一层封装。

常用注解

@Size

用法: 用于验证字符串、集合、数组等的长度或大小。

属性:

  • min: 最小长度或大小(默认值为0)。
  • max: 最大长度或大小(默认值为Integer.MAX_VALUE)。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Size(min = 3, max = 10)
private String name;

@Min

用法: 用于验证数值型字段的值不小于指定的最小值。

属性:

  • value: 最小值。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Min(18)
private int age;

@Max

用法: 用于验证数值型字段的值不大于指定的最大值。

属性:

  • value: 最大值。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Max(100)
private int score;

@Null

用法: 用于验证字段必须为null

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Null
private String middleName;

@NotNull

用法: 用于验证字段不能为null

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@NotNull
private String firstName;

@NotEmpty

用法: 用于验证字符串、集合、数组等不能为null且必须有元素(即非空)。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@NotEmpty
private List items;

@NotBlank

用法: 用于验证字符串不能为null,且去除空白字符后长度必须大于0。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@NotBlank
private String username;

@Pattern

用法: 用于验证字符串字段必须符合指定的正则表达式。

属性:

  • regexp: 正则表达式。
  • flags: 正则表达式的匹配标志(可选)。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Pattern(regexp = "^[a-zA-Z0-9]+$")
private String alphanumeric;

@DecimalMin

用法: 用于验证数值型字段的值不小于指定的最小值(支持小数)。

属性

:

  • value: 最小值。
  • inclusive: 是否包含最小值,默认为true(包含)。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@DecimalMin(value = "0.1", inclusive = false)
private double price;

@DecimalMax

用法: 用于验证数值型字段的值不大于指定的最大值(支持小数)。

属性:

  • value: 最大值。
  • inclusive: 是否包含最大值,默认为true(包含)。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@DecimalMax(value = "100.0", inclusive = true)
private double percentage;

@Digits

用法: 用于验证数值型字段的整数位数和小数位数。

属性:

  • integer: 最大整数位数。
  • fraction: 最大小数位数。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Digits(integer = 5, fraction = 2)
private BigDecimal amount;

@Email

用法: 用于验证字符串字段是否符合电子邮件地址的格式。

属性:

  • regexp: 正则表达式,默认是一个简单的电子邮件格式。
  • flags: 正则表达式的匹配标志(可选)。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Email
private String email;

@Future

用法: 用于验证日期或时间字段的值必须在将来。

示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Future
private LocalDate expirationDate;

全局异常解析

当校验异常时,会抛出 MethodArgumentNotValidException 异常,可以对其添加全局的异常解析:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ExceptionHandler(MethodArgumentNotValidException.class)
public Map<String, String> handleValidationExceptions(
  MethodArgumentNotValidException ex) {
    Map<String, String> errors = new HashMap<>();
    ex.getBindingResult().getAllErrors().forEach((error) -> {
        String fieldName = ((FieldError) error).getField();
        String errorMessage = error.getDefaultMessage();
        errors.put(fieldName, errorMessage);
    });
    return errors;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-8-14 1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring validator常用注解
规则: @AssertFalse Boolean,boolean 验证注解的元素值是false @AssertTrue Boolean,boolean 验证注解的元素值是true @NotNull 任意类型 验证注解的元素值不是null @Null 任意类型 验证注解的元素值是null @Min(value=值) BigDecimal,BigInteger, byte,short, int, long,等任何Number或CharSequence(存储的是数字)子类型 验证注解的元素值大于等于@Min指定的
用户10325771
2023/03/01
7830
springboot系列学习(七)JSR303数据校验 , 注解不能使用爆红的解决方法,后端自动的校验实体类的值是不是合法的,
我们之前在前端,会校验我们输入的值是不是合法的,比如email,如果不是email格式那么就报错。这个是前段 的验证规则,其实后端也是可以的。这个就是JSR303数据校验
一写代码就开心
2020/11/20
1.2K0
springboot系列学习(七)JSR303数据校验 , 注解不能使用爆红的解决方法,后端自动的校验实体类的值是不是合法的,
Spring Validation实践及其实现原理
Spring 框架,广泛应用于 JAVA 企业级开发中,包含了一套实用的字段校验机制: Spring Validation。这个机制融合了 JSR380 规范,即 Bean Validation 2.0。本文将介绍 Spring Validation 的使用方法,包括基础注解的应用以及进阶使用技巧。
政采云前端团队
2023/11/22
5900
Spring Validation实践及其实现原理
Spring4的新特性 Bean Validation1.1
参考:http://jinnianshilongnian.iteye.com/blog/1990081 Hibernate validator: Bean Validation 中内置的 constraint @Null 被注释的元素必须为 null @NotNull 被注释的元素必须不为 null @AssertTrue 被注释的元素必须为 true @AssertFalse 被注释的元素必须为 false @Min(value)
wuweixiang
2018/08/14
3560
Java Bean Validation的使用
因为在Spring Boot中默认已经包含了Hibernate Validator,所以不需要再引入额外的Jar包
十毛
2019/05/14
8590
使用Spring mvc 入参validator遇到的坑
首先说明,博主这里并不是写spring mvc参数校验怎么用,因为网上有一大波的干货好文,不需要博主来提炼了,我这里只记录一个我使用过程中遇到的一个坑
kl博主
2023/11/18
2390
1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
作为一个开发者,聊起数据校验(Bean Validation),不管是前、中、后端都耳熟能详,并且心里暗爽:so easy。
YourBatman
2020/11/24
1.3K0
1. 不吹不擂,第一篇就能提升你对Bean Validation数据校验的认知
Java Validation Api
在我们应用程序的业务逻辑中,经常会碰到参数教研的情况,比如在Controller中,我们的参数是一个Entity的时候,经常要判断这个Entity的字段是否是null之类或者是长度等。通常来讲,我们用比如StringUtils或者是if等来进行教研,这样在我们的代码层上面就会带来很不好的体验,阅读、维护的成本会大大增加,造成冗余。因此有了这个JSR 303。   Bean Validation为JavaBean提供了相应的API来给我们做参数的验证。通过Bean Validation比如@NotNull
haoming1100
2018/04/27
1.7K0
Java Validation Api
springboot validation参数校验
其中在spring-boot-starter-web中有hibernate-validater的依赖。
山行AI
2019/08/26
3.8K0
springboot validation参数校验
validation[通俗易懂]
后台开发需要对对象的传进来的参数进行校验,有专门的校验工具,validation bean 是基于JSR-303标准开发出来的,使用注解方式实现,及其方便,但是这只是一个接口,没有具体实现。
全栈程序员站长
2022/09/20
8860
validation[通俗易懂]
一坨一坨的 if/else 参数校验,终于被 SpringBoot 参数校验组件整干净了!
数据的校验的重要性就不用说了,即使在前端对数据进行校验的情况下,我们还是要对传入后端的数据再进行一遍校验,避免用户绕过浏览器直接通过一些 HTTP 工具直接向后端请求一些违法数据。
Guide哥
2021/04/30
1.6K0
spring注解式参数校验
转载自 https://blog.csdn.net/jinzhencs/article/details/51682830
allsmallpig
2021/02/25
8850
初探Springboot 参数校验
工作中我们经常会遇到验证字段是否必填,或者字段的值是否在给定范围之内等等类似的问题,如果说是一两个字段的验证还好,验证的字段很多的话,代码就会被大量的if语句包围。通常来说,这些关于字段的判断应该和业务逻辑分开来,可能我们想到的第一个解决方案就是通过AOP,这也能解决我们的问题的。但实际上大可不必,作为一个成熟的语言,Java已经给我们提供解决方案了,那就是Bean Validation。
索码理
2024/03/04
3080
初探Springboot 参数校验
Hibernate Validator 数据校验框架
JSR303是专家组成员向JCP提交的第1版Bean Validation,即针对bean数据校验提出的一个规范,使用注解方式实现数据校验。后面有升级版本JSR349及JSR380。
冬天vs不冷
2025/01/21
2430
Hibernate Validator 数据校验框架
SpringBoot2.x系列教程(十九)Validation数据校验基础使用
在正常的业务处理中,针对外部的情况,校验参数的合法性是必须的,而在Spring MVC中有两种验证方式:Spring自带的验证框架和基于JSR实现的框架。
程序新视界
2020/01/14
2K0
Spring Boot:自定义参数校验
https://docs.jboss.org/hibernate/validator/6.2/reference/en-US/html_single/#validator-defineconstraints-spec
HLee
2021/07/30
9870
Spring Boot:自定义参数校验
如何在你的项目中使用JSR 303 - Bean Validation进行数值校验?
JSR-303 是 Java EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是hibernate Validator。
Java后端技术
2018/08/09
1.6K0
@Valid注解的使用---SpringMvc中的校验框架@valid和@validation的概念及相关使用
转载自 https://blog.csdn.net/xzmeasy/article/details/76098188 ;
allsmallpig
2021/02/25
5.8K0
使用spring validation完成数据后端校验
前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验。但是为了避免用户绕过浏览器,使用http工具直接向后端请求一些违法数据,服务端的数据校验也是必要的,可以防止脏数据落到数据库中,如果数据库中出现一个非法的邮箱格式,也会让运维人员头疼不已。我在之前保险产品研发过程中,系统对数据校验要求比较严格且追求可变性及效率,曾使用drools作为规则引擎,兼任了校验的功能。而在一般的应用,可以使用本文将要介绍的validatio
kirito-moe
2018/04/27
3.1K0
使用spring validation完成数据后端校验
深入了解数据校验(Bean Validation):从深处去掌握@Valid的作用(级联校验)以及常用约束注解的解释说明【享学Java】
关于Bean Validation的基本原理篇完结之后,接下来就是小伙伴最为关心的干货:使用篇。 如果说要使用Bean Validation数据校验,我十分相信小伙伴们都能够使用,但估计大都是有个前提的:Spring MVC环境。我极其简单的调查了一下,近乎99%的人都是只把数据校验使用在Spring MVC的Controller层面的,而且几乎90%的人都是让它必须和@RequestBody一起来使用去校验JavaBean入参~
YourBatman
2019/09/03
5.9K0
深入了解数据校验(Bean Validation):从深处去掌握@Valid的作用(级联校验)以及常用约束注解的解释说明【享学Java】
推荐阅读
相关推荐
Spring validator常用注解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验