springboot后端开发-自定义参数校验器

ops/2024/9/22 21:55:03/

背景

在使用springboot进行后端开发的时候,经常会遇到数据校验的问题, 有时候可能默认的校验器不足以满足自己的需求, 这个时候就需要开发一个自己的校验器

在 Spring Boot 中自定义参数校验器通常涉及以下几个步骤:

1. 定义注解

首先需要定义一个自定义的注解,该注解将用于标记需要校验的字段。

java">import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;@Documented
// 实现真正校验逻辑的验证器
@Constraint(validatedBy = NotAllEmptyValidator.class)
// 注解放置于类上方
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface NotAllEmpty {String message() default "不允许所有参数为空";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};String[] fields default {};
}

在这个例子中,我们定义了一个名为 NotAllEmpty 的注解,并指定了它使用 NotAllEmptyValidator 类进行验证。同时定义了默认的错误消息。

2. 创建校验器

接下来需要创建一个实现 ConstraintValidator 接口的类来实现具体的校验逻辑。

java">import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Collection;public class NotAllEmptyValidator implements ConstraintValidator<NotAllEmpty, Object> {@Overridepublic void initialize(NotAllEmpty constraintAnnotation) {// 可以在这里初始化一些配置项}@Overridepublic boolean isValid(Object value, ConstraintValidatorContext context) {// 加入自己的验证逻辑return false;}
}

这个 NotAllEmptyValidator 类实现了 ConstraintValidator<NotAllEmpty, Object> 接口,其中 isValid 方法负责检查传入的集合是否为空。

3. 使用自定义注解

最后可以在需要校验的实体类或方法上使用这个自定义注解。

java">import javax.validation.constraints.NotNull;
import java.util.List;@NotAllEmpty(fields={"name", "age"})
public class MyEntity {private String name;private Integer age;// Getter and Setter
}

或者在控制器的方法参数上使用:

java">import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@PostMapping("/save")public String save(@RequestBody @NotAllEmpty MyEntity reqBody) {// ...}
}

4. 配置 Bean Validation

确保 Spring Boot 应用已经启用了 Bean Validation,这通常是通过添加 spring-boot-starter-validation 依赖自动完成的。

如果使用 Maven,可以添加如下依赖:

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

如果使用 Gradle,则添加:

implementation 'org.springframework.boot:spring-boot-starter-validation'

以上就是如何在 Spring Boot 中创建和使用自定义参数校验器的基本流程。你可以根据自己的需求调整注解和校验器的具体实现细节。

5. 参考文档

Spring MVC Custom Validation
jboss相关章节


http://www.ppmy.cn/ops/101131.html

相关文章

基于STM32开发的智能宠物喂食系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化定时器配置与喂食控制OLED显示与喂食状态提示Wi-Fi通信与远程控制应用场景 宠物自动喂食管理长时间外出的远程宠物喂食常见问题及解决方案 常见问题解决方案结论 1. 引言 对于宠物…

【C#】【EXCEL】Bumblebee/Classes/ExColumn.cs

文章目录 Bumblebee/Classes/ExColumn.csFlow diagramDescriptionCode Bumblebee/Classes/ExColumn.cs Flow diagram #mermaid-svg-6WUm4r0wDJG9uelI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6WUm4r0wDJG9ue…

Java学习第三天

总体三部分内容&#xff1a;数据类型转换、运算符使用、调用Java提供的程序 数据类型转换&#xff1a; 1.自动类型转换 类型范围小的可以直接转换给类型范围大的变量&#xff1b;例如int类型可以直接赋值为long型 int a 10; long b a; char字符型在计算机底层是一个数字…

架构师面试题系列之Mybatis面试专题及答案(36题)

目录 1、什么是 MyBatis?2、讲下 MyBatis 的缓存3、Mybatis 是如何进行分页的?分页插件的原理是什么?4、简述 Mybatis 的插件运行原理,以及如何编写一个插件?5、Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一6、#{}和${}的区别是什么?7、为什么说 Mybatis 是…

AI辅助编码在主流IDE中的智能代码补全说明

AI辅助编码在主流IDE&#xff08;集成开发环境&#xff09;中的智能代码补全和生成功能已经成为现代软件开发不可或缺的一部分&#xff0c;它们显著提高了开发效率和代码质量。以下是几个主流IDE中智能代码补全和生成功能的对比&#xff1a; 1. IntelliJ IDEA 智能代码补全&a…

PCIe学习笔记(27)

Link Status Dependencies&#xff08;链路状态依赖关系&#xff09; DL_Down状态下的事务层行为 DL_Down状态表示链路上没有与其他组件的连接&#xff0c;或者与其他组件的连接已经丢失&#xff0c;并且无法通过物理层或数据链路层恢复。本节指定了当DPC未被触发并且数据链路…

AI for Genomics丨空间转录组数据表征算法 SPACE,基因组学的人工智能应用

在「Meet AI4S」系列直播第二期中&#xff0c;我们有幸邀请到了清华大学生命科学学院张强锋实验室博士后李雨哲&#xff0c; 他所在的张强锋实验室属于清华大学生命科学学院&#xff0c;同时也是清华-北大生命科学联合中心、北京结构生物学高精尖创新中心的重要组成部分。实验室…

数据分析中的上钻、下钻、切片和切块

“上钻”、“下钻”、“切片”、“切块”是数据分析和数据展示中的常见概念,尤其是在处理多维数据或数据仓库时。以下是每个术语的解释: 上钻(Drill Up): 这是指从数据的更详细层级上升到更概括的层级。比如,假设你有一个按时间划分的销售数据,当前在查看按月的销售情况…