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

spring boot项目如何自定义参数校验规则

spring boot项目对参数进行校验时,比如非空校验,可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验,自带的校验规则无法满足要求,此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样,先自定义一个注解,然后指定校验类,在校验类里实现具体的校验规则。

下面以校验手机号为例,来实现自定义参数校验规则。

首先定义一个注解,直接照着NotNull注解定义即可。

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
//这里的class就是实现具体校验规则的类
@Constraint(validatedBy = {MobileNoValidator.class})
public @interface MobileNo {String message() default "请输入正确的手机号";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};}

然后定义实现具体校验规则的类,这个类要实现ConstraintValidator接口。

public class MobileNoValidator implements ConstraintValidator<MobileNo, String> {@Overridepublic boolean isValid(String value, ConstraintValidatorContext context) {if ((value == null)) {return false;}String regex = "^1\\d{10}$";Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);Matcher m = p.matcher(value);return m.matches();}
}

这样,很简单的两个类,就实现了自定义参数校验规则。当参数中加了MobileNo注解,如果输入的手机号不满足1打头的11位数字的规则,就会抛出异常信息。下面写个controller简单测试一下。

先定义一个vo。

public class UserVo {@NotNullprivate Long id;@NotNull@MobileNoprivate String mobileNo;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getMobileNo() {return mobileNo;}public void setMobileNo(String mobileNo) {this.mobileNo = mobileNo;}
}

再定一个controller。

@RestController
public class UserController {@PostMapping(value = "/test")public String test(@Validated @RequestBody UserVo userVo) {return "success";}
}

启动项目,用postman测试一下。

首先输入符合要求的手机号,这时是能正常返回success。

然后输入一个不符合要求的手机号,会返回400错误码,错误信息如下。当然这里返回的错误信息比较不友好,实际项目中可以对参数校验异常统一拦截,返回需要的数据格式。

相关文章:

spring boot项目如何自定义参数校验规则

spring boot项目对参数进行校验时&#xff0c;比如非空校验&#xff0c;可以直接用validation包里面自带的注解。但是对于一些复杂的参数校验&#xff0c;自带的校验规则无法满足要求&#xff0c;此时需要我们自定义参数校验规则。自定义校验规则和自带的规则实现方式一样&…...

springboot整合xxl-job,通过代码进行调度中心注册开启任务等

背景&#xff1a;由于工作需要&#xff0c;当用户在登录时自动触发定时任务。而不需要我们手动到调度中心管理页面去创建任务。 工程介绍&#xff1a;分为两个项目&#xff0c;第一个是调度中心的项目&#xff08;xxl-job-admin&#xff09;。第二个是我们自己的项目&#xff0…...

k8s集群部分使用gpu资源的pod出现UnexpectedAdmissionError问题

记录一次排查UnexpectedAdmissionError问题的过程 1. 问题 环境 3master节点N个GPU节点 kubelet版本&#xff1a;v1.19.4 kubernetes版本&#xff1a;v1.19.4 生产环境K8S集群&#xff0c;莫名其妙的出现大量UnexpectedAdmissionError状态的Pod&#xff0c;导致部分任务执…...

自定义 el-select 和 el-input 样式

文章目录 需求分析el-select 样式el-input 样式el-table 样式 需求 自定义 选择框的下拉框的样式和输入框 分析 el-select 样式 .select_box{// 默认placeholder:deep .el-input__inner::placeholder {font-size: 14px;font-weight: 500;color: #3E534F;}// 默认框状态样式更…...

解决本地centos虚拟机重启,自动变换 ip 地址的问题

修改网卡配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 原配置&#xff1a; TYPE"Ethernet" PROXY_METHOD"none" BROWSER_ONLY"no" BOOTPROTO"dhcp" DEFROUTE"yes" IPV4_FAILURE_FATAL"no" IPV6INI…...

pt36项目短信OAth2.0

5、短信验证码 1、注册容联云账号&#xff0c;登录并查看开发文档&#xff08;以下分析来自接口文档&#xff09; 2、开发文档【准备1】&#xff1a;请求URL地址1.示例&#xff1a;https://app.cloopen.com:8883/2013-12-26/Accounts/{}/SMS/TemplateSMS?sig{}ACCOUNT SID# s…...

教师们如何一对一私发成绩?

在传统的教育中&#xff0c;老师通常会通过班级群或家长会等方式发布学生的成绩信息。然而&#xff0c;这种公开的方式可能会让一些学生感到尴尬和不安&#xff0c;因为他们可能不愿意让其他人知道他们的成绩情况。为了解决这个问题&#xff0c;今天我就给老师们推荐一款免费的…...

12.11

1.q&#xff0c;w&#xff0c;e亮led1&#xff0c;2&#xff0c;3&#xff1b; a&#xff0c;s&#xff0c;d灭led1&#xff0c;2&#xff0c;3&#xff1b; main.c #include "uar1.h"#include "led.h"void delay(int ms){int i,j;for(i0;i<ms;i){for…...

Spring JdbcTemplate

一、简介 Spring 框架对 JDBC 进行封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作。它是 spring 框架中提供的一个对象&#xff0c;是对原始 Jdbc API 对象的简单封装。spring 框架为我们提供了很多的操作模板类。 针对操作关系型数据&#xff1a; jdbcTemplateHibe…...

力扣编程题算法初阶之双指针算法+代码分析

目录 第一题&#xff1a;复写零 第二题&#xff1a;快乐数&#xff1a; 第三题&#xff1a;盛水最多的容器 第四题&#xff1a;有效三角形的个数 第一题&#xff1a;复写零 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 思路&#xff1a; 上期…...

实现安装“自由化”!在Windows 11中如何绕过“您尝试安装的应用程序未通过微软验证”

这篇文章描述了如果你不能安装应用程序,而是当你在Windows 11中看到消息“您尝试安装的应用程序未通过微软验证”时该怎么办。完成这些步骤将取消你安装的应用程序必须经过Microsoft验证的要求。 使用设置应用程序 “设置”应用程序提供了绕过此警告消息的最简单方法,以便你…...

【mysql】下一行减去上一行数据、自增序列场景应用

背景 想获取if_yc为1连续账期数据 思路 获取所有if_yc为1的账期数据下一行减去上一行账期&#xff0c;如果为1则为连续&#xff0c;不等于1就为断档获取不等于1的最小账期&#xff0c;就是离当前账期最近连续账期 代码 以下为mysql语法&#xff1a; select acct_month f…...

CLIP在Github上的使用教程

CLIP的github链接&#xff1a;https://github.com/openai/CLIP CLIP Blog&#xff0c;Paper&#xff0c;Model Card&#xff0c;Colab CLIP&#xff08;对比语言-图像预训练&#xff09;是一个在各种&#xff08;图像、文本&#xff09;对上进行训练的神经网络。可以用自然语…...

入职字节外包一个月,我离职了。。。

有一种打工人的羡慕&#xff0c;叫做“大厂”。 真是年少不知大厂香&#xff0c;错把青春插稻秧。 但是&#xff0c;在深圳有一群比大厂员工更庞大的群体&#xff0c;他们顶着大厂的“名”&#xff0c;做着大厂的工作&#xff0c;还可以享受大厂的伙食&#xff0c;却没有大厂…...

SpringBoot的web开发

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 web开发1 web场景1.1 自动配置1.2 默认效果 &#x1f48e;总结 web开发 SpringBoot的web开发能力是由SpringMVC提供的 1 web场景 1.1 自动配置 整合web场景 <dependency><groupId>org.springframewo…...

传染病传播速度

题干 R0值是基本传染数的简称&#xff0c;指的是在没有采取任何干预措施的情况下&#xff0c;平均每位感染者在传染期内使易感者个体致病的数量。数字越大说明传播能力越强&#xff0c;控制难度越大。一个人传染的人的数量可以用幂运算来计算。假设奥密克戎的R0为10&#xff0…...

前端打包环境配置步骤

获取node安装包并解压 获取node安装包 wget https://npmmirror.com/mirrors/node/v16.14.0/node-v16.14.0-linux-x64.tar.xz 解压 tar -xvf node-v16.14.0-linux-x64.tar.xz 创建软链接 sudo ln -s 此文件夹的绝对路径/bin/node /usr/local/bin/node&#xff0c;具体执行如下…...

css的4种引入方式--内联样式(标签内style)、内部样式表(<style>)、外部样式表(<link>、@import)

1.内联样式&#xff08;Inline Styles&#xff09;&#xff1a;可以直接在HTML元素的style属性中定义CSS样式。 例如&#xff1a; <p style"color: red; font-size: 16px;">这是一段红色的文本</p>内联样式适用于对单个元素应用特定的样式&#xff0c;…...

GPT-4 变懒了?官方回复

你是否注意到&#xff0c;最近使用 ChatGPT 的时候&#xff0c;当你向它提出一些问题&#xff0c;却得到的回应似乎变得简短而敷衍了&#xff1f;对于这一现象&#xff0c;ChatGPT 官方给出了回应。 译文&#xff1a;我们听到了你们所有关于 GPT4 变得更懒的反馈&#xff01;我…...

编译器和 IR:LLVM IR、SPIR-V 和 MLIR

编译器通常是各种开发工具链中的关键组件&#xff0c;可提高开发人员的工作效率。编译器通常用作独立的黑匣子&#xff0c;它使用高级源程序并生成语义上等效的低级源程序。不过&#xff0c;它仍然是内部结构倾向的;内部之间流动的内容就称为中间表示 &#xff08;IR&#xff0…...

kprobe函数入口时的汇编跳板执行流程与栈帧机制

kprobe函数入口汇编跳板执行流程与栈帧机制 文章目录kprobe函数入口汇编跳板执行流程与栈帧机制前言环境准备ftrace跳板创建跳板执行流程与栈帧逐行拆解初始状态与安全校验双层栈帧构建&#xff08;CONFIG_FRAME_POINTER&#xff09;通用寄存器保存与C函数参数准备剩余寄存器保…...

Windows系统盘空间告急?Driver Store Explorer帮你轻松清理冗余驱动,快速释放10GB+

Windows系统盘空间告急&#xff1f;Driver Store Explorer帮你轻松清理冗余驱动&#xff0c;快速释放10GB 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾困惑于Windows系统盘空…...

太烧token了,我用Ai写了一个vscode的插件wps-editor(已开源)

这是一篇关于开源项目Wps-Editor的介绍文章&#xff0c;希望能让大家了解它的价值并支持其发展。 引言 在人工智能(AI)浪潮席卷各行各业的今天&#xff0c;大型语言模型(LLM)已成为内容创作者、办公人士、学生乃至研究者的得力助手。无论是撰写报告、分析数据、润色文案&#…...

连锁经营行业商旅平台选型指南与测评排名Top 6:多门店与全链路商旅管控方案

2026年4月的第一周&#xff0c;艾美咨询发布了《2026年中国连锁经营行业商旅管理数字化白皮书》&#xff0c;数据显示国内规模以上连锁经营企业的商旅支出占整体运营成本的8.7%&#xff0c;其中私车公用、门店巡检类商旅的合规漏洞造成的浪费占总商旅支出的19.2%&#xff0c;连…...

Notepad-- 终极中文编辑器:从零开始打造你的专属高效文本工作流

Notepad-- 终极中文编辑器&#xff1a;从零开始打造你的专属高效文本工作流 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器&#xff0c;目标是做中国人自己的编辑器&#xff0c;来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...

效率提升秘籍:借助快马AI自动生成健壮的视频续播管理模块

最近在开发视频播放功能时&#xff0c;遇到了一个很常见的需求&#xff1a;实现"继续播放上次观看位置"的功能。本以为是个简单的功能&#xff0c;但实际开发中发现要考虑的细节还真不少。经过一番折腾&#xff0c;我总结出了一套高效的解决方案&#xff0c;分享给大…...

26年知网AIGC检测算法大升级,这些变化你知道吗?

有同学在网上反馈&#xff0c;去年下半年写好的论文查重&#xff0c;AI率检测都过了&#xff0c;今年坐等毕业。没想到重新一查内容都变成率红色。评论区很多同学都有类似的情况。 根本原因还是&#xff1a;知网检测算法大升级&#xff0c;AI检测更加严格&#xff01; 今天这篇…...

新手零基础入门:用快马ai生成你的第一个arduino流水灯程序

作为一个刚接触Arduino的新手&#xff0c;我最近在InsCode(快马)平台上完成了第一个LED流水灯项目。整个过程比我预想的顺利很多&#xff0c;特别适合零基础的朋友入门体验。下面分享我的学习过程和几点实用心得&#xff1a; 硬件准备其实很简单 只需要一块Arduino UNO开发板和…...

javaweb大学生校园跑腿服务系统的设计与实现沙箱支付

目录同行可拿货,招校园代理 ,本人源头供货商沙箱支付功能概述核心功能模块技术实现要点测试注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作同行可拿货,招校园代理 ,本人源头供货商 沙箱支付功能概述 在JavaWeb校园跑…...

AI写专著必备!专业工具深度剖析,解决写作难题

对于学术研究者来说&#xff0c;写一本专著可不是一朝一夕的灵感闪现&#xff0c;而是一次长达几年的坚持与努力。从选题构思开始&#xff0c;到科学合理的章节布局&#xff0c;再到逐字逐句的内容填充和文献的逐一核对&#xff0c;每个环节都不容小觑。研究者们常常需要在教学…...