springboot做自定义校验注解

目录

自定义校验注解的实现

注意:

首先,我们需要自定义一个校验注解:

注解含义:

@Target({ElementType.FIELD})

@Retention(RetentionPolicy.RUNTIME)

@Constraint(validatedBy = PhoneValidator.class)

校验注解逻辑实现类:

使用自定义校验注解:

控制器方法:


        有时候我们在接收前端产给我们数据的时候需要进行一些校验,部分校验可以通过已有的注解进行直接使用,但是仍存在一些需求是现有注解没有提供的,所以就需要我们自定义校验注解来实现我们需要的功能,那接下来就来看看自定义校验注解是怎么实现的吧~

要实现一个自定义校验注解,主要是有两步。一是注解本身,二是校验逻辑实现类

首先,我们来看一下校验注解的一个流程:

自定义校验注解的实现

现在我们以校验传过来的参数是否为正整数来实现自定义校验注解。

如下,我的实体类中有这样一个字段:(此处不能直接将类型设置为int型,不然前面无论传来什么值都会将其值修改为一个整型,会破坏数据的真实性)

注意:

1、此处不能直接使用@Pattern注解,因为这个注解只试用在类型为String的参数上;

2、不能使用@Digits注解,@Digits(integer = 1, fraction = 0, message = "数据精度只能是非负整数")

//    integer = 3: 这意味着数字的整数部分应该有3位。换句话说,该数字应该是一个千位数。
//fraction = 0: 这意味着数字的小数部分应该为0。换句话说,该数字应该是一个整数,而不是一个带有小数部分的数。
//message = "数据精度只能是非负整数": 这是在验证失败时显示的消息。在本例中,如果提供的数字不符合指定的精度要求,则会返回这条消息。

这个注解或根据你的要求自动将你传来的值进行四舍五入成整型。

首先,我们需要自定义一个校验注解:
import com.datacommon.ParameterValidation.NonNegativeIntegerValidator;import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;//校验字段必须为非负整数
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NonNegativeIntegerValidator.class)
public @interface IntegerParam {String message() default "整数型字段必须为非负整数";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}
注解含义:
@Target({ElementType.FIELD})

  注解是指定当前自定义注解可以使用在哪些地方,这里仅仅让他可以使用属性上。但还可以使用在更多的地方,比如说方法上、构造器上等等。

  • TYPE - 类,接口(包括注解类型)或枚举
  • FIELD - 字段(包括枚举常量)
  • METHOD - 方法
  • PARAMETER - 参数
  • CONSTRUCTOR - 构造函数
  • LOCAL_VARIABLE - 局部变量
  • ANNOTATION_TYPE -注解类型
  • PACKAGE - 包
  • TYPE_PARAMETER - 类型参数
  • TYPE_USE - 使用类型
@Retention(RetentionPolicy.RUNTIME)

  指定当前注解保留到运行时。保留策略有下面三种:

  • SOURCE - 注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃。
  • CLASS - 注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期。
  • RUNTIME - 注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在。
@Constraint(validatedBy = PhoneValidator.class)

  指定了当前注解使用哪个校验类来进行校验。

校验注解逻辑实现类:
import com.datacommon.ParameterValidation.paramInterface.IntegerParam;import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;/*** 自定义参数校验规则* 校验穿进来的参数是否为非负整数*/
public class NonNegativeIntegerValidator implements ConstraintValidator<IntegerParam, Double> {@Overridepublic void initialize(IntegerParam constraintAnnotation) {}@Overridepublic boolean isValid(Double value, ConstraintValidatorContext context) {System.out.println(value);if(value.toString().contains(".0")){return true;}return !value.toString().contains(".") && !value.toString().contains("-");}
}
使用自定义校验注解:

使用我们自定义的校验注解就和普通的注解一样,只需要在相关字段上加上我们的注解名称就行了~

控制器方法:

记住要在使用到校验类的时候加上@Valid注解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/767748.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法打卡day24|回溯法篇04|Leetcode 93.复原IP地址、78.子集、90.子集II

算法题 Leetcode 93.复原IP地址 题目链接:93.复原IP地址 大佬视频讲解&#xff1a;复原IP地址视频讲解 个人思路 这道题和昨天的分割回文串有点类似&#xff0c;但这里是限制了只能分割3次以及分割块的数字大小&#xff0c;根据这些不同的条件用回溯法解决就好啦 解法 回溯…

#微信小程序:微信小程序常见的配置传值

微信小程序 app.js 设置全局的基础数据 通过 let app getApp() 获取里面的数据 app.json 设置tab,注册页面的路由 app.wxss 公共的样式&#xff0c;引入iconfont project.config.json 项目配置文件&#xff0c;用的最多就是配置是否开启https校验 pages 包含一个个…

2024最新版正规视频影视系统源码/APP+H5视频影视源码

全新魅思V20正规视频影视系统源码&#xff0c;APPH5视频影视源码。会员花费三千购入的&#xff0c;具体搭建教程放压缩包了&#xff01; 有兴趣的下载自行研究吧&#xff0c;搭建一共要用到3个域名&#xff0c;可以拿二级域名搭建。

C语⾔内存函数

目录 1. memcpy使⽤和模拟实现 memcpy函数的模拟实现: 2. memmove使⽤和模拟实现 memmove的模拟实现&#xff1a; 3. memset函数的使⽤ 4. memcmp函数的使⽤ 1. memcpy使⽤和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数me…

一周速递|全球车联网产业动态(2024年3月24日)

政策法规 1、3月19日&#xff0c;北京市委副书记、市长殷勇表示&#xff0c;北京市三年前开始率先采用车路协同技术路线&#xff0c;推进自动驾驶技术发展。以北京经济技术开发区为起点&#xff0c;将进一步深化自动驾驶和智慧城市建设的联动&#xff0c;继续在这个领域吸引更…

c语言函数大全(L开头)

c语言函数大全(L开头) There is no nutrition in the blog content. After reading it, you will not only suffer from malnutrition, but also impotence. The blog content is all parallel goods. Those who are worried about being cheated should leave quickly. 函数名…

Python文件读写操作

文件操作注意点 注意点&#xff1a; 1. for line in file --> 会将偏移量移到末尾 2. buffering1 --> 缓冲区中遇到换行就刷新&#xff0c;即向磁盘中写入 3. 读操作结束后&#xff0c;文本偏移量就会移动到读操作结束位置 """编写一个程序,循环不停的写入…

简述C语言文件操作

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文(平均质量分79)&#xff0c;分享…

数组划分,双指针

1 移动零 题目链接&#xff1a;https://leetcode.cn/problems/move-zeroes/description/ 这道题要在原数组中交换位置&#xff0c;并且还要求算法有稳定性。我们的常规思路是划分数组&#xff0c;用双指针解决。 public static void doubleIndex3(int[] arr){for(int cur 0…

计算机网络(特南鲍姆版) 期末总结

教材《计算机网络&#xff08;第六版&#xff09;》 特南鲍姆版 介绍 互联的可以交换信息的计算机称之为计算机网络&#xff0c;如&#xff1a;英特网 用途 1.访问信息 客户-服务器模型 peer-to-peer system&#xff08;点对点技术&#xff0c;P2P&#xff09; P2P&#xf…

深入理解Linux与Java的IO模型

目录 IO模型Linux的I/O模型Java的I/O模型联系与区别 同步&#xff0c;异步&#xff0c;阻塞&#xff0c;非阻塞同步与异步阻塞与非阻塞Linux I/O模型中的应用Java I/O模型中的应用容易混淆的地方 通过交互理解IO模型用户空间与内核空间Linux I/O模型的交互过程 在软件开发领域&…

加载三维模型,加载时黑的?

JS引擎是单线程 JS和渲染引擎线程无法同时进行&#xff0c;若异步任务和同步任务过多&#xff0c;JS引擎运行&#xff0c;渲染引擎未工作&#xff0c;导致黑黑的

Delphi DataSet转JSon(字符串拼接json)

Delphi中将TDataSet转换为JSon字符串。 function Test.DataSetToJson(ADataset: TDataSet): string; varARecord: string;AField: TField;i: integer; beginResult : ;with ADataset dobegin// 如果dataset是空就退出if IsEmpty thenExit;//初始化ARecordARecord : ;//定义开头…

图论基础|841.钥匙和房间、463. 岛屿的周长

目录 841.钥匙和房间 思路&#xff1a;本题是一个有向图搜索全路径的问题。 只能用深搜&#xff08;DFS&#xff09;或者广搜&#xff08;BFS&#xff09;来搜。 463. 岛屿的周长 841.钥匙和房间 力扣题目链接 (opens new window) 有 N 个房间&#xff0c;开始时你位于 0…

git 常用命令-以及命令解析

一、Push操作 1.先git init 标识仓库地址2.git add xxx git add . 代表添加当前目录所有文件代表标识提交的文件3.git commit -m xxxx 代表git提交后需要说的什么话4.git remote add origin xxxx xxxx替换为github仓库的ssh地址5.git push origin xxx xxx为分支名称如果有报错可…

TCP重传机制详解——03DSACK

TCP重传机制详解——03DSACK 什么是DSACK DSACK是指"Duplicate Selective Acknowledgment"&#xff0c;即重复选择性确认。在TCP通信中&#xff0c;DSACK机制允许接收方向发送方发送有关重复数据包的信息&#xff0c;以帮助发送方更准确地处理重传和丢包情况。 当…

C语言- 输出班级第n个学生的平均成绩

题目描述 输出班级第 n个学生的平均成绩。每个学生有英语、数学、语文、计算机 4 科成绩。若干个学生的 4 门成绩构成一个表格&#xff0c;可以用二维数组储存&#xff0c;每行代表一个学生的 4 门成绩。以为要计算某个学生的平均成绩&#xff0c;需要快速定位到该生成绩的起始…

概率论与数理统计-条件概率题目1-两次取球问题(有放回)

题目&#xff1a; 设袋中装有r只红球,t只白球.每次自袋中任取一只球,观察其颜色例3然后放回,并再放入a只与所取出的那只球同色的球.若在袋中连续取球四次&#xff0c;试求第一、二次取到红球且第三、四次取到白球的概率. 解答&#xff1a; 涉及到条件概率和多次独立事件的概…

ColorWell for Mac 直装激活 非常实用的调色工具

ColorWell 是一款为Mac操作系统设计的实用工具&#xff0c;它旨在帮助用户快速而方便地选择、管理和应用颜色。这款应用程序特别适合设计师、插画师、网页开发者以及任何需要精确颜色匹配的专业人士使用。ColorWell 的核心功能是提供一个简单直观的界面&#xff0c;让用户可以轻…

C++一维数组练习oj(3)

为什么C的一维数组练习要出要做那么多的题目&#xff1f;因为我们是竞赛学生&#xff01;想要将每个知识点灵活运用的话就必须刷大量的题目来锻炼思维。 我使用的是jsswoj.com这个刷题网站&#xff0c;当然要钱... C一维数组练习oj(2)-CSDN博客这是上一次的题目讲解 这道题有…