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

使用 Spring Boot 进行数据校验

在这里插入图片描述

以下是使用 Spring Boot 进行数据校验的步骤:

一、添加依赖
pom.xml 文件中添加 Spring Boot Starter Validation 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

二、创建数据模型
创建一个数据模型类,并使用 JSR-303 注解进行数据校验,例如:

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

public class User {
    @NotBlank(message = "用户名不能为空")
    @Size(min = 3, max = 20, message = "用户名长度应在 3 到 20 之间")
    private String username;

    @NotBlank(message = "密码不能为空")
    @Size(min = 6, max = 20, message = "密码长度应在 6 到 20 之间")
    private String password;

    @Email(message = "请输入有效的电子邮件地址")
    private String email;

    // 生成 getter 和 setter 方法
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

三、在控制器中使用校验
在控制器类中使用 @Valid 注解来启用对请求体中数据的校验,并使用 BindingResult 来处理校验结果,例如:

import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;

@RestController
public class UserController {
    @PostMapping("/register")
    public String registerUser(@Valid @RequestBody User user, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            return "输入信息有误: " + bindingResult.getAllErrors();
        }
        return "用户注册成功";
    }
}

解释

  1. 添加依赖
    • spring-boot-starter-validation 依赖提供了 Spring Boot 中的数据校验支持,它包含了 JSR-303 验证 API 的实现,如 Hibernate Validator。
  2. 创建数据模型
    • @NotBlank 注解确保字段不为空,包括不为 null 和不包含仅空格的字符串。
    • @Size 注解用于限制字段的长度范围,minmax 属性分别指定最小和最大长度。
    • @Email 注解确保字段包含有效的电子邮件地址。
  3. 在控制器中使用校验
    • @Valid 注解放在 @RequestBody 注解的对象之前,表示需要对该对象进行数据校验。
    • BindingResult 用于存储校验结果。如果 bindingResult.hasErrors()true,表示有数据校验不通过,可通过 bindingResult.getAllErrors() 获取错误信息。

这样,当你向 /register 发送一个 POST 请求时,如果请求体中的数据不满足 User 类中定义的校验规则,将返回相应的错误信息;如果数据校验通过,则会返回 “用户注册成功”。

请注意,在实际应用中,你可以根据具体业务需求添加更多的校验注解,如 @NotNull@Pattern 等,以确保数据的准确性和完整性。同时,对于校验结果的处理可以更加细化,比如将错误信息以更友好的形式返回给前端,而不是直接使用 bindingResult.getAllErrors() 的原始输出。

除了使用 Spring Boot 自带的 spring-boot-starter-validation 组件进行数据验证外,还有以下一些成熟的组件可以使用:

一、Hibernate Validator
Hibernate Validator 是 Bean Validation 的参考实现,它提供了丰富的注解和强大的验证功能。它支持 JSR 380(Bean Validation 2.0),可以很好地与 Spring Boot 集成。

添加依赖

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>6.2.0.Final</version>
</dependency>

使用示例
与 Spring Boot 的 spring-boot-starter-validation 类似,使用 JSR-303 注解,如 @NotNull, @Size, @Email 等,在数据模型上添加注解进行验证。

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class Person {
    @NotNull
    @Size(min = 2, max = 30)
    private String name;

    // getter 和 setter 方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

解释

  • @NotNull 确保 name 属性不为 null
  • @Size(min = 2, max = 30) 确保 name 属性的长度在 2 到 30 之间。

二、Apache Commons Validator
Apache Commons Validator 是 Apache 提供的验证框架,它不仅可以用于服务器端验证,还可以用于客户端验证。它提供了丰富的验证规则和实用工具,可用于验证日期、数字、电子邮件、URL 等。

添加依赖

<dependency>
    <groupId>commons-validator</groupId>
    <artifactId>commons-validator</artifactId>
    <version>1.7</version>
</dependency>

使用示例

import org.apache.commons.validator.routines.EmailValidator;

public class ValidationExample {
    public static void main(String[] args) {
        EmailValidator emailValidator = EmailValidator.getInstance();
        boolean isValid = emailValidator.isValid("test@example.com");
        System.out.println(isValid);
    }
}

解释

  • EmailValidator.getInstance() 获取一个 EmailValidator 的实例。
  • emailValidator.isValid("test@example.com") 用于验证电子邮件地址是否有效。

三、Google Guava 的 Preconditions
Google Guava 的 Preconditions 类提供了一些简单的静态方法,用于检查参数的前置条件,虽然它不是一个完整的数据验证框架,但在方法级别的参数验证中非常有用。

添加依赖

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>30.1-jre</version>
</dependency>

使用示例

import com.google.common.base.Preconditions;

public class PreconditionExample {
    public static void main(String[] args) {
        try {
            int value = -1;
            Preconditions.checkArgument(value > 0, "Value must be positive");
        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }
    }
}

解释

  • Preconditions.checkArgument(value > 0, "Value must be positive") 检查 value 是否大于 0,如果不满足条件会抛出 IllegalArgumentException 并输出自定义错误消息。

以上这些组件都有各自的特点和优势,你可以根据自己的需求选择使用。Spring Boot 自带的 spring-boot-starter-validation 对于大多数 Web 应用的数据验证需求已经足够,而 Apache Commons Validator 对于一些通用的验证规则,如验证电子邮件、URL 等更具优势。Google Guava 的 Preconditions 则更侧重于方法参数的前置条件检查。


http://www.kler.cn/a/468832.html

相关文章:

  • HashMap总结使用+原理+面试
  • 22408操作系统期末速成/复习(考研0基础上手)
  • 【golang】go errors 处理错误追踪打印堆栈信息
  • Oracle 11g rac + Dataguard 环境调整 redo log 大小
  • 数据仓库中的指标体系模型介绍
  • 云备份项目--服务端编写
  • 如何构建云原生时空大数据平台?
  • EasyExcel监听器详解
  • 【QED】暴食海獭
  • DDcGAN_多分辨率图像融合的双鉴别条件生成对抗网络_y译文马佳义
  • 若依中Feign调用的具体使用(若依微服务版自身已集成openfeign依赖,并在此基础上定义了自己的注解)
  • 4_TypeScript 条件语句 --[深入浅出 TypeScript 测试]
  • 强化学习常用库的版本对应关系
  • 【C语言】可移植性陷阱与缺陷(六): 内存位置0的访问
  • C++并发:在线程间共享数据
  • 鸿蒙day1-ArkTS-认识和存储数据
  • C语言:调试的概念和调试器的选择
  • Laravel操作ElasticSearch
  • FFMPEG 保存实时流到本地文件
  • 【JVM】总结篇-运行时内存篇
  • 我用AI学Android Jetpack Compose之开篇
  • opengauss安装指南
  • IDEA配置maven和git并如何使用maven打包和git推送到gitlab
  • 如何让大模型不再“已读乱回”——RAG技术助力生成更精确的答案
  • NLP期末复习
  • 书生大模型入门第二节