Validation校验

文章目录

  • Validation校验
    • 作用
    • 依赖坐标
    • UserController接收客户端注册用户请求的方法
    • 请求参数封装实体User的结构
    • 校验分组

Validation校验

作用

服务端接收前端传递的请求从参数的时候,可以对请求参数进行自动校验。
场景:通过postman向服务端发送一个注册用户的请求,请求参数包括了userName用户名和password用户密码,并不是所有的用户名和密码都可以被注册进来的,因此我们就可以通过Validation来个请求参数格式的校验,如果格式不正确那么我们直接就会抛出异常。

依赖坐标

如下图:
在这里插入图片描述
代码如下:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>validated</artifactId><version>1.0-SNAPSHOT</version><packaging>jar</packaging><name>validated</name><url>http://maven.apache.org</url><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.6</version></dependency><!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator --><dependency><groupId>org.hibernate.validator</groupId><artifactId>hibernate-validator</artifactId><version>6.1.7.Final</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.jetbrains</groupId><artifactId>annotations-java5</artifactId><version>RELEASE</version><scope>compile</scope></dependency></dependencies>
</project>

UserController接收客户端注册用户请求的方法

如下图:
在这里插入图片描述
代码如下:

package org.example.controller;import org.example.entity.User;
import org.example.validate.UserGroup;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@PostMapping("/register")public String register(@Validated(value = {UserGroup.Register.class}) @RequestBody User user) {// 保存用户信息到数据库等操作return "注册成功";}
}

请求参数封装实体User的结构

如下图:
在这里插入图片描述
代码如下:

@Data
public class User {@NotNull(groups = {UserGroup.Update.class}, message = "用户名不能为空")@Size(groups = UserGroup.Update.class, min = 5, max = 20, message = "用户名长度必须在5到20个字符之间")private String username;@NotNull(groups = {UserGroup.Update.class}, message = "密码不能为空")@Size(groups = UserGroup.Update.class, min = 8, max = 20, message = "密码长度必须在8到20个字符之间")private String password;
}

校验分组

什么叫做校验分组?举个例子,

比如有个很傻逼的场景:“注册用户的时候需要全部校验username和password属性,但是更新用户的时候不需要校验username和password属性,那么针对于这个场景,我们就可以使用校验分组的思想来实现”。

因此之所以有校验分组就是为了让我们的业务校验更加的灵活,针对于不同类型的请求,虽然这个请求中的参数都是一样的,但是我们的校验规则却不一样了,可能A类型请求的参数我们校验了5个,B类型请求的参数我们却只校验2个;

看一下我们上面的代码中的校验分组的例子,如下图:
在这里插入图片描述

可以发现我们上面只校验了Register注册分组中的参数;

再来看下UserController控制器中指定的校验分组是哪一个,如下图:
在这里插入图片描述
可以发现我们这里在控制器中指定的校验分组也是Register注册分组,因此User中的所有校验规则都会生效;

接着再来看下UserGroup类的结构,如下图:
在这里插入图片描述
其实也就是接口中套接口的格式;

最后在postman中发送一个注册用户的http请求,如下图:
在这里插入图片描述
因为postman中传递的参数为空字符串,因此校验都不会通过,postman的返回结果如上图;再来看下idea里面的控制台输入信息 如下图:
在这里插入图片描述

而如果我们把上面的User实体中的校验分组都改变为Update分组,那么我们的校验就可以通过了,也不是可以通过,压根就没有去校验,因为我们UserController中指定的校验分组是Register分组,但是User中根本就没有Register分组,全部是Update分组,如下图:
在这里插入图片描述
再来看下postman中的执行结果,如下图:
在这里插入图片描述

一个很好的理解校验分组的视角
在UserController控制器中通过@Validate(value = {一个或多个校验分组})指定我们本次使用的一个或多个校验分组,而在我们的后端接收前端请求参数的实体中比如User实体中给属性配置校验分组;
这样我们就能灵活的去根据业务需求结合Validation去校验前端请求参数了。

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

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

相关文章

【React】使用Token做路由权限控制

在components/AuthRoute/index.js中 import { getToken } from /utils import { Navigate } from react-router-domconst AuthRoute ({ children }) > {const isToken getToken()if (isToken) {return <>{children}</>} else {return <Navigate to"/…

三十八篇:架构大师之路:探索软件设计的无限可能

架构大师之路&#xff1a;探索软件设计的无限可能 1. 引言&#xff1a;架构的艺术与科学 在软件工程的广阔天地中&#xff0c;系统架构不仅是设计的骨架&#xff0c;更是灵魂所在。它如同建筑师手中的蓝图&#xff0c;决定了系统的结构、性能、可维护性以及未来的扩展性。本节…

个性化光标和动态壁纸

光标 进入这个宝藏网页至美化 至美化 进入鼠标页面&#xff0c;选择自己喜欢的鼠标&#xff0c;进入相关页面 分为两种&#xff0c;那么热爱有钱的UU可以选择高清版 像我这种没钱的孩子或者觉得试用版够用的就使用上面的 点击下载 进入自己的文件夹&#xff0c;解压成功之…

深度学习11-13

1.神经元的个数对结果的影响&#xff1a; &#xff08;http://cs.stanford.edu/people/karpathy/convnetjs/demo/classify2d.html&#xff09; &#xff08;1&#xff09;神经元3个的时候 &#xff08;2&#xff09;神经元是10个的时候 神经元个数越多&#xff0c;可能会产生…

英伟达下一代DLSS或利用人工智能

英伟达的黄仁勋在2024年Computex展会上的问答环节中&#xff0c;提前透露了公司未来几代深度学习超采样&#xff08;DLSS&#xff09;技术的发展方向。在回答有关DLSS的问题时&#xff0c;黄仁勋表示&#xff0c;未来我们将看到通过纯粹的人工智能生成的纹理和对象。他还提到&a…

【React】Axios请求头注入token

业务背景: Token作为用户的数据标识&#xff0c;在接口层面起到了接口权限控制的作用&#xff0c;也就是说后端有很多接口都需要通过查看当前请求头信息中是否含有token数据&#xff0c;来决定是否正常返回数据 // 添加请求拦截器 request.interceptors.request.use(config …

基于CDMA的多用户水下无线光通信(3)——解相关多用户检测

继续上一篇博文&#xff0c;本文将介绍基于解相关的多用户检测算法。解相关检测器的优点是因不需要估计各个用户的接收信号幅值而具有抗远近效应的能力。常规的解相关检测器有运算量大和实时性差的缺点&#xff0c;本文针对异步CDMA的MAI主要来自干扰用户的相邻三个比特周期的特…

语音识别相关文章整理目录

一、语音大模型架设与功能实现 使用sherpa-ncnn进行中文语音识别&#xff08;ubuntu22&#xff09;-CSDN博客文章浏览阅读953次&#xff0c;点赞30次&#xff0c;收藏26次。请注意&#xff0c;需要首先安装安装了所有必要的依赖项&#xff0c;包括 CMake、Git 和一个合适的 C/…

Java启动jar设置内存分配详解

在微服务架构越来越盛行的情况下&#xff0c;我们通常一个系统都会拆成很多个小的服务&#xff0c;但是最终部署的时候又因为没有那么多服务器只能把多个服务部署在同一台服务器上&#xff0c;这个时候问题就来了&#xff0c;服务器内存不够&#xff0c;这个时候我们就需要对每…

UsersGUI.java用户界面

完成效果图&#xff1a; 点击阅读按钮&#xff1a; 点击删除按钮&#xff1a; 点击新建按钮&#xff1a; Code /* This GUI application allows users to manage their diaries: ​ Read: Users can read existing diaries. Create: Users can create new diaries. Delete: Us…

任务5.2 掌握DStream基础操作

实战&#xff1a;DStream基础操作 了解DStream编程模型&#xff1a;DStream是Spark Streaming中对实时数据流的抽象&#xff0c;可以看作一系列持续的RDD。DStream可以通过外部数据源获取或通过现有DStream的高级操作获得。 操作本质&#xff1a;DStream上的操作最终会转化为对…

(4) cmake编译静态库和动态库

文章目录 静态库整体代码动态库编译整体代码执行结果(静态) 静态库整体代码 static.h #pragma onecevoid static_demo();static.cpp #include "static.h" #include <iostream>void static_demo(){std::cout<<"static demo"<<std::end…

[数据集][目标检测]药片药丸检测数据集VOC+YOLO格式152张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;152 标注数量(xml文件个数)&#xff1a;152 标注数量(txt文件个数)&#xff1a;152 标注类别…

CTFHUB-SSRF-端口扫描

已经提示我们需要扫描8000~9000的端口 ?urlhttp://127.0.0.1:8000/flag.php 访问用burp抓包爆破 通过Burp扫描8000-9000端口开放的web服务&#xff0c;发现8718开放web服务

SpringBoot+ENC实现密钥加密及使用原理

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SpringBootENC实现密钥加密及使用原理 ⏱️ 创作时间&#xff1a; 202…

运算放大器(运放)低通滤波反相放大器电路和积分器电路

低通滤波反相放大器电路 运放积分器电路请访问下行链接 运算放大器(运放)积分器电路 设计目标 输入ViMin输入ViMax输出VoMin输出VoMaxBW&#xff1a;fp电源Vee电源Vcc–0.1V0.1V–2V2V2kHz–2.5V2.5V 设计说明 这款可调式低通反相放大器电路可将信号电平放大 26dB 或 20V/…

支持 MKV、MP4、AVI、MPG 等格式视频转码器

一、简介 1、一款开源的视频转码器&#xff0c;适用于 Linux、Mac 和 Windows。它是一个免费的工具&#xff0c;由志愿者们开发&#xff0c;可以将几乎所有格式的视频转换为现代、广泛支持的编码格式。你可以在官网上下载该应用或源代码。该软件支持 MKV、MP4、AVI、MPG 等格式…

如何看待鸿蒙HarmonyOS?

鸿蒙系统&#xff0c;自2019年8月9日诞生就一直处于舆论风口浪尖上的系统&#xff0c;从最开始的“套壳”OpenHarmony安卓的说法&#xff0c;到去年的不再兼容安卓的NEXT版本的技术预览版发布&#xff0c;对于鸿蒙到底是什么&#xff0c;以及鸿蒙的应用开发的讨论从来没停止过。…

Java内存泄漏检测和分析介绍

在Java中&#xff0c;内存泄漏检测和分析是一个重要的任务&#xff0c;可以通过以下几种方式进行&#xff1a; 1. 使用VisualVM VisualVM是一个可视化工具&#xff0c;可以监控、分析Java应用程序的内存消耗。它可以显示堆内存、垃圾收集、线程等信息&#xff0c;并且可以对内…

图解注意力

图解注意力 Part #2: The Illustrated Self-Attention 在文章前面的部分&#xff0c;我们展示了这张图片来展示自注意力被应用于正在处理单词"it"的一层中&#xff1a; 在本节中&#xff0c;我们将看看这是如何完成的。请注意&#xff0c;我们将以一种试图理解单…