Validation校验

2024-06-17 10:04
文章标签 校验 validation

本文主要是介绍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去校验前端请求参数了。

这篇关于Validation校验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1069138

相关文章

Android 二维码、条形码(识别率校验)

ZxingCode 以core-3.4.jar为基础构建,具有如下功能: 1.创建条形码、二维码; 2.相机扫描条形码、二维码; 3.读取照片条形码、二维码; 4.识别率算法修改提升; 5.扫码View背景颜色可修改; FIX-2022.5.12.1 1.新增手电筒开关调用方法; 2.新增暂停解码方法; 3.新增恢复解码方法; 4.虚拟机扫码崩溃; 5.OnScanCodeListener统

金蝶盘点机金蝶PDA外购入库单校验防止收错货实现商品品种和数量校验

采购入库单校验 单据校验,是在电脑上已经存在这个单据,然后对商品实物跟单据进行核对,校验品种和数量。 传统的【采购入库单】校验方式是,供应商送货来,仓管员拿着纸质的【采购入库单】清点商品数量, 并一行行的记录商品数量,这个过程如果商品品种几十种,几百种,就很容核对错误,而且费时费力,搞得头晕眼花,工作强度比较大,对仓管员的责任心和细心程度要求比较高。 如果使用盘点机PDA进行【采购入库

注解+反射 参数校验更加简洁

背景 做RPC接口的时候 我们需要对一些字段做非空校验 在字段很多的情况下 如果一个一个的用if判断 代码会很恶心 所以我们需要有一种便捷的方式去实现这个功能 比如使用注解+反射的方式 怎么做? 首先定义注解 非空注解: package com.api.annotation;import java.lang.annotation.*;/*** 非空校验注解*/@Target({Elemen

Java中的标准注解与数据校验:深入解析与实例

目录 Java中的标准注解与数据校验:深入解析与实例1. 基础校验注解`@NonNull``@NotBlank``@Size` 2. 数值校验注解`@Min` & `@Max``@Positive` & `@Negative` 3. 枚举与模式匹配自定义注解示例(概念性展示) 4. 自定义校验逻辑结论 Java中的标准注解与数据校验:深入解析与实例 在Java开发中,注解(An

APK签名校验绕过

将APK重命名为zip文件,然后可以看到有个META-INF的文件夹,里面有三个文件,分别名为MANIFEST.MF、CERT.SF和CERT.RSA,这些就是使用signapk.jar生成的签名文件。 1、 MANIFEST.MF文件: 程序遍历update.apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个生成SHA1的数字签名信息,再用Base64进行编码。具体代

8 交叉验证 1 Cross-validation

交叉验证 1 Cross-validation 交叉验证 1 Cross-validation 介绍例子1 - 如何选择正确的Model 基础验证法例子2 - 如何选择正确的Model 交叉验证法Cross Validation例子3 - 如何选择模型参数 以准确率accuracy判断例子4 - 如何选择模型参数 以平均方差Mean squared error判断 介绍 Sk

java 日期校验yyyymmdd

package com.wl.cigrec.util;public class DateUtil {/*** 判断参数的格式是否为“yyyyMMdd”格式的合法日期字符串* * @author Liang.Wang* @since 02/24/15* @param str* @return true/false*/public static boolean isValidDate(String s

validation 验证参数

validation 验证参数 一、引入POM依赖 添加spring-boot-starter-validation <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency> 或添加hibernat

Android正则校验手机号码

不多说了直接上校验方法 /** * 验证手机号码 * 正确返回true,错误返回false * @param mobiles * @return [0-9]{5,9} */ public static boolean isMobileNO(String mobiles) { Pattern p = Pattern .compile("^((13[0-9]

URL validation failed. The error could have been caused through the use of the browser's navigation

URL validation failed. The error could have been caused through the use of the browser's navigation buttons(the browser Back button or refresh, for example).  最近在登陆Oracle Application时遇到问题:URL validat