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

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

背景

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

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

1. 定义注解

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

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 接口的类来实现具体的校验逻辑。

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. 使用自定义注解

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

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
}

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

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相关章节

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Win 10高效录屏指南:四大神器助力屏幕录制!
  • python学习之redis
  • openpyxl库详细介绍十分全面
  • QT-五子棋游戏
  • JavaScript 中的深拷贝新宠:structuredClone() 函数详解
  • 网络安全之xss靶场练习
  • 用py获取显卡的占用率
  • 【解压即玩】PC电脑版【漫威蜘蛛侠2】豪华中文版+通关存档+画质超棒,神作
  • MySQL——单表查询(二)按条件查询(11)OR 和 AND 关键字一起使用的情况
  • Springcloud从零开始--Eureka(一)
  • 九、 系统安全(考点篇)试题
  • 无人机飞手培训:考证、组装、维修技术详解
  • 深信服技术服务工程师面试全过程分享
  • 为什么Qt源码中要用d_ptr和q_ptr
  • 力扣223题详解:矩形面积的多种解法与模拟面试
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CSS 三角实现
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • mac修复ab及siege安装
  • spark本地环境的搭建到运行第一个spark程序
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vim 折腾记
  • Vue ES6 Jade Scss Webpack Gulp
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 开发基于以太坊智能合约的DApp
  • 配置 PM2 实现代码自动发布
  • 世界上最简单的无等待算法(getAndIncrement)
  • 我这样减少了26.5M Java内存!
  • 移动端唤起键盘时取消position:fixed定位
  • 用jQuery怎么做到前后端分离
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • # Redis 入门到精通(七)-- redis 删除策略
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #、%和$符号在OGNL表达式中经常出现
  • #ifdef 的技巧用法
  • (~_~)
  • (7)摄像机和云台
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (八)c52学习之旅-中断实验
  • (八十八)VFL语言初步 - 实现布局
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (分布式缓存)Redis分片集群
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (四)软件性能测试
  • (游戏设计草稿) 《外卖员模拟器》 (3D 科幻 角色扮演 开放世界 AI VR)
  • *2 echo、printf、mkdir命令的应用
  • ./configure,make,make install的作用
  • .aanva
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题