【Javax.Validation】✈️整合 SpringBoot 实现运行时的参数校验

news2025/4/6 5:00:53

目录

👋前言

👀一、Validation 依赖

📫二、常见注解

        2.1 不需要指定注解参数

        2.2 需要声明注解参数

💞️三、项目测试注解使用

        3.1 依赖引入

        3.2 实体类创建

        3.3 创建对外接口

         3.4 模拟请求

🌱四、章末


👋前言

        小伙伴们大家好,最近SH天气也是迎来了高温橙色预警,要注意防暑;最近在公众号上看到了一个使用外部依赖减少项目中参数校验的文章,这个外部依赖属于 Validation,项目中确实有用到,今天再来学习通学习下该依赖提供的常见注解;上篇文章的链接如下:

【Java Bean 映射器】通过 MapStruct 和 BeanUtils 拷贝对象的区别-CSDN博客

👀一、Validation 依赖

        该依赖是 Java  标准中的一部分,提供了一套对 Java Bean 验证的机制。这套机制允许在运行时验证对象的属性是否满足预期的条件,主要有以下特点:

  • 简单易用:通过注解完成验证逻辑,简化了开发过程以及省略大量手动 if - else 判断
  • 独立性:验证逻辑与业务逻辑分离,增强了代码的模块化和可维护性。
  • 标准化:基于 Java 标准,广泛支持,可以与各种框架和库集成使用。

另外的话,该注解主要用于验证 RESTful API 的请求参数也就是前端传来的接口请求校验

📫二、常见注解

        2.1 不需要指定注解参数

                这些注解的使用比较简单,直接在需要校验的字段上根据要求使用符合的注解即可

注解说明
@NotNull元素必须非空(非null 且非空字符串)
@NotEmpty元素必须非空且长度>0
@NotBlank元素字符串必须非空,并且至少包含一个非空白字符
@Null元素必须为null
@AssertTrue元素布尔值必须为true
@AssertFalse元素布尔值必须为false
@Email

元素必须是有效的电子邮件地址

        2.2 需要声明注解参数
注解说明
@Size字符串或集合的数量是否在指定的范围之内
@Length字符串元素的长度是否在指定的范围内
@Pattern元素是否符合指定的正则表达式匹配

💞️三、项目测试注解使用

        环境准备:搭建一个简易的 SPringBoot 项目可运行,准备一个接口模拟请求工具,本地使用的是 ApiPost

        3.1 依赖引入

                因为默认的 SPringBoot 项目是没有帮我们集成这个依赖的,需要手动引入以下配置,之后刷新下 maven 自动帮我们下载依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-validation</artifactId>
        </dependency>
        3.2 实体类创建

                这里普通的不需要参数的注解不多讲,主要是有几个需要传入参数的,比如需要判断大小的注解需要给一个值的区间,也可以声明异常提示信息;需要正则判断的元素要提供一个正则表达式和异常提示信息...

import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.*;
import java.util.ArrayList;

/**
 * @author HuangBen 
 */
@Data
public class TestValidEnity {

    @NotNull
    private Integer id;

    @NotEmpty
    private String name1;

    @NotBlank
    private String name2;

    @Null
    private Object obj;

    @AssertTrue
    private Boolean bool;

    @Size(max = 10, message = "list元素长度超过限制")
    private ArrayList<Object> list;

    @Length(max = 10, min = 5, message = "str元素长度应该在5-10之间")
    private String str;

    @Min(value = 10, message = "num数值过小,最小值为10")
    private Integer num;

    @Email
    private String eamil;

    @Pattern(regexp = "^\\d{4}-\\d{2}-\\d{2}$", message = "date类型应该为 yyyy-MM-dd ")
    private String date;


}
        3.3 创建对外接口

        这里就简单接收参数,并且打印即可

        注:这里的 @Valid 注解必要并且位置需要在请求的参数之前

         3.4 模拟请求

                3.4.1 请求参数不合法

                首次模拟请求的话,将几个需要参数的注解字段传递错误,该请求会返回错误信息,如下对应每个元素

 

 

                        3.4.2 请求参数正常

                         参数正常合法时,请求正常传递到后端并且被接收打印

🌱四、章末

        文章到这里就结束了~ 

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

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

相关文章

RSS 2024 清华大学交叉院高阳提出高效的机器人操作技能学习方法

机器人掌握一项新技能需要几步&#xff1f; 一般来说&#xff0c;在传统机器学习方法中&#xff0c;通常使用演示学习的方式教会机器人掌握新技能&#xff0c;然而&#xff0c;收集高质量的演示数据成本高且耗时&#xff0c;一定程度上影响了机器人技能学习进度。尽管视频作为…

⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》

[2309.05277] Interactive Class-Agnostic Object Counting (arxiv.org) code&#xff1a; cvlab-stonybrook/ICACount: [ICCV23] Official Pytorch Implementation of Interactive Class-Agnostic Object Counting (github.com) 目录 Abstract Abstract 我们提出了一个新…

linux学习记录(一)--------目录及文件操作

文章目录 前言Linux目录及文件操作1.Linux目录结构2.常用的Linux命令3.vi编辑器的简单使用4.vi的两个模式 前言 小白学习linux记录有错误随时指出~ Linux目录及文件操作 Linux采用Shell命令->操作文件 1.Linux目录结构 根目录&#xff1a;/ 用户目录&#xff1a;~或者/ho…

float转uint8_t数组

float类型在x64中占4字节&#xff0c;需要占据uint8_t数组大小4字节 数据float类型3.14&#xff0c;在内存中4字节地址应该为0x4048f5c3 如果直接使用memcpy内存复制&#xff0c;0xc3会放在数组下标小的位置

〖任务1〗ROS2 jazzy Linux Mint 22 安装教程

前言&#xff1a; 本教程在Linux系统上使用。 目录 一、linux安装二、linux VPN安装三、linux anaconda安装&#xff08;可选&#xff09;四、linux ROS2 安装五、rosdep init/update 解决方法六、安装GUI 一、linux安装 移动硬盘安装linux&#xff1a;[LinuxToGo教程]把ubunt…

代码随想录算法训练营第43天|LeetCode 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

1. LeetCode 300.最长递增子序列 题目链接&#xff1a;https://leetcode.cn/problems/longest-increasing-subsequence/description/ 文章链接&#xff1a;https://programmercarl.com/0300.最长上升子序列.html 视频链接&#xff1a;https://www.bilibili.com/video/BV1ng411J…

进阶SpringBoot之 Spring 官网或 IDEA 快速构建项目

SpringBoot 就是一个 JavaWeb 的开发框架&#xff0c;约定大于配置 程序 数据结构 算法 微服务架构是把每个功能元素独立出来&#xff0c;再动态组合&#xff0c;是对功能元素的复制 这样做可以节省调用资源&#xff0c;每个功能元素的服务都是一个可替代、可独立升级的软…

从地铁客流讲开来:超一线城市的客运量特征

这篇我们把视角聚焦在四大超一线城市&#xff0c;北上广深&#xff0c;我们来看看这些城市地铁客运量的异同&#xff0c;这里放一个背景2024年6月8日—6月10日是我国农历的端午节&#xff0c;我们看图说话&#xff0c;相同的特征&#xff1a;1.四大一线城市客流都在周五达到客运…

数学建模--蒙特卡罗随机模拟

目录 蒙特卡罗方法的基本原理 蒙特卡罗方法在优化中的应用 蒙特卡罗方法的优势与局限 优势 局限 典型应用案例 Python代码示例 ​编辑 结论 蒙特卡罗方法在数学建模中的具体应用案例有哪些&#xff1f; 如何改进蒙特卡罗方法以提高计算效率和精度&#xff1f; 蒙特…

如何使你的mermaid流程图里的某一段文字加粗、变斜、成为上下标……

目录 参考的链接开头1.加粗&#xff0c;*斜体*与下划线2.标记,~~删除线~~与^上^~下~标3.代码片与标题4.注释与蓝色链接5.其</q>他 东西 结尾 参考的链接 HTML标签列表(按字母排序)和HTML标签列表(按功能排序) 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我们…

【架构】客户端优化

这篇文章总结一下服务器网关及之前部分的优化&#xff0c;如客户端的优化&#xff0c;CDN/DNS等。 这里我们先谈一谈客户端缓存优化的手段。一般我们后端在说到缓存&#xff0c;第一时间想到的往往是redis&#xff0c;其实缓存在架构层次还有很多其他可以实现的地方&#xff0…

从LLM到大模型推理的最新进展

大语言模型LLM的推理引擎经过一年时间发展&#xff0c;现在主流方案收敛到了开源的vLLM和半闭源的TensorRT-LLM。 TRT-LLM基于C开发&#xff0c;有NV算子开发黑魔法加持&#xff0c;在其重点支持的场景里&#xff0c;性能可以做到极致。vLLM基于python开发&#xff0c;代码简洁…

MySQL第2讲--关系型数据库以及SQL语句分类之DDL数据库和表的操作

文章目录 前言关系型数据库&#xff08;RDBMS&#xff09;关系型数据库的特点 MySQL数据模型SQL介绍基本语法规则SQL语句的分类DDL的介绍DDL的数据库操作DDL的表操作 前言 上一节MySQL第1讲–详细安装教程和启动方法中介绍了MySQL如何安装&#xff0c;以及如何启动和客户端连接…

使用 Elastic 和 Mistral 构建多语言 RAG

作者&#xff1a;来自 Elastic Gustavo Llermaly 使用 Elastic 和 Mixtral 8x22B 模型构建多语言 RAG 应用程序。 Mixtral 8x22B 是性能最高的开放式模型&#xff0c;其最强大的功能之一是能够流利使用多种语言&#xff1b;包括英语、西班牙语、法语、意大利语和德语。 想象一…

质量属性-系统架构师(四十)

质量属性 1性能&#xff1a; 指系统响应能力。如响应时间、吞吐量。 设计策略&#xff1a;优先级队列&#xff0c;增加计算机资源&#xff0c;减少计算机开销&#xff0c;引入并发机制&#xff0c;采用资源调度。 2可靠性&#xff1a; 在一定时间内正常运行的情况下&#x…

PTA—基础编程题目集(7-21)

7-21 求特殊方程的正整数解 目录 题目描述 输入格式&#xff1a; 输出格式&#xff1a; 输入样例1&#xff1a; 输出样例1&#xff1a; 输入样例2&#xff1a; 输出样例2&#xff1a; 参考代码 总结 题目描述 本题要求对任意给定的正整数N&#xff0c;求方程X2Y2N的…

《Milvus Cloud向量数据库指南》——关于Ivy.ai:重塑沟通效率与数据安全的创新先锋

关于Ivy.ai:重塑沟通效率与数据安全的创新先锋 在数字化转型的浪潮中,Ivy.ai以其前瞻性的视野和专业团队的匠心独运,正逐步成为高等教育、医疗保健及公共部门沟通效率提升的引领者。这家企业不仅代表了人工智能技术在服务领域的最新进展,更以其旗舰产品IvyQuantum™的横空…

搬瓦工香港CMI VPS测评

搬瓦工香港cmi怎么样&#xff1f;搬瓦工香港VPS分CN2 GIA和CMI两种不同接入的网络&#xff0c;其中CMI网络的回程是强制三网全部都走移动CMI线路&#xff0c;相对CN2 GIA来说有一定的差距。实际的情况测评数据送上&#xff0c;可供参考。 CPU型号未知&#xff0c;主频2.7GHz&a…

【C++】一堆数组 冒泡排序

冒泡排序&#xff0c;一种很常见的排序法师 这章要划重点&#xff0c;很重要&#xff01;&#xff01; 排序思路为前一个元素与后一个元素比大小&#xff0c;一直循环一轮&#xff0c;找出最大/最小的那个元素后&#xff0c;进行下一轮&#xff0c;找到第二大/小的元素......…