前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring Validation 详解

Spring Validation 详解

作者头像
浪漫主义狗
发布2024-08-15 14:21:51
950
发布2024-08-15 14:21:51
举报
文章被收录于专栏:HAUE_LYS'Blog

校验框架

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
复制
@Size(min = 3, max = 10)
private String name;

@Min

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

属性:

  • value: 最小值。

示例:

代码语言:javascript
复制
@Min(18)
private int age;

@Max

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

属性:

  • value: 最大值。

示例:

代码语言:javascript
复制
@Max(100)
private int score;

@Null

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

示例:

代码语言:javascript
复制
@Null
private String middleName;

@NotNull

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

示例:

代码语言:javascript
复制
@NotNull
private String firstName;

@NotEmpty

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

示例:

代码语言:javascript
复制
@NotEmpty
private List items;

@NotBlank

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

示例:

代码语言:javascript
复制
@NotBlank
private String username;

@Pattern

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

属性:

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

示例:

代码语言:javascript
复制
@Pattern(regexp = "^[a-zA-Z0-9]+$")
private String alphanumeric;

@DecimalMin

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

属性

:

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

示例:

代码语言:javascript
复制
@DecimalMin(value = "0.1", inclusive = false)
private double price;

@DecimalMax

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

属性:

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

示例:

代码语言:javascript
复制
@DecimalMax(value = "100.0", inclusive = true)
private double percentage;

@Digits

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

属性:

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

示例:

代码语言:javascript
复制
@Digits(integer = 5, fraction = 2)
private BigDecimal amount;

@Email

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

属性:

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

示例:

代码语言:javascript
复制
@Email
private String email;

@Future

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

示例:

代码语言:javascript
复制
@Future
private LocalDate expirationDate;

全局异常解析

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

代码语言:javascript
复制
@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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 校验框架
  • 常用注解
    • @Size
      • @Min
        • @Max
          • @Null
            • @NotNull
              • @NotEmpty
                • @NotBlank
                  • @Pattern
                    • @DecimalMin
                      • @DecimalMax
                        • @Digits
                          • @Email
                            • @Future
                            • 全局异常解析
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档