springboot表单提交之validator校验
作者:程序逸 发布时间:2023-05-16 23:19:17
标签:springboot,validator,校验
前言
表单提交是最常见的数据提交方式,我们经常会填写表单信息,比如用户名,身份证,手机号等等,因此就会产生身份证是否合法,用户名是否为空,虽然我们可以直接在前台使用js就进行格式的校验,但如果使用postman工具直接发请求呢?使用我们后端也需要进行对数据的校验,这样极大的确保数据的安全性和合法性。
1.新建一个Springboot项目,并且添加web依赖。下面是本项目的全部依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.为了方便演示,我引入了Lombok,然后我们新建一个User类来模拟用户注册时提交的表单信息。
这里涉及到几个注解:
@NotEmpty(message=“用户名不能为空”) |
---|
@Length(min=6,max = 12,message=“用户名长度必须位于6到12之间”) |
@Email(message=“请输入正确的邮箱”) |
@Pattern(regexp = “正则表达式”, message = “身份证格式错误”) |
User.java的代码:
package com.ctvit.validatordemo.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import java.io.Serializable;
/**
* 用户名,密码,邮箱,身份证
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
@NotEmpty(message="用户名不能为空")
@Length(min=6,max = 12,message="用户名长度必须位于6到12之间")
private String userName;
@NotEmpty(message="密码不能为空")
@Length(min=6,message="密码长度不能小于6位")
private String passWord;
@Email(message="请输入正确的邮箱")
private String email;
@Pattern(regexp = "^(\\d{18,18}|\\d{15,15}|(\\d{17,17}[x|X]))$", message = "身份证格式错误")
private String idCard;
}
3.然后书写一个简单的控制器来进行模拟访问:
package com.ctvit.validatordemo.controller;
import com.ctvit.validatordemo.pojo.User;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
@RestController
public class UserController {
@PostMapping("/Register")
public String Register(@Valid User user, BindingResult bindingResult){//一个BindingResult对应一个@Valid注解的参数,用来表示校验消息
StringBuffer stringBuffer = new StringBuffer();//使用StringBuffer拼接错误信息,比如用户名为空,长度等
if(bindingResult.hasErrors()){//判读是否携带错误信息
List<ObjectError> list =bindingResult.getAllErrors();//获取所有错误信息对象
for (ObjectError objectError:list) {//遍历对象,获取错误的具体信息
//将所有信息进行拼接
stringBuffer.append(objectError.getDefaultMessage());
stringBuffer.append("---");
}
}
return stringBuffer!=null?stringBuffer.toString():"";//将错误信息返回
}
}
4.这里涉及到一个接口:BindingResult。
方法名 | 作用 |
---|---|
hasErrors() | 判断当前参数是否符合 |
getAllErrors() | 获取错误信息对象 |
getDefaultMessage() | 获取错误信息 |
输入一半正确的,一般错误的:
都正确的数据:
总结
来源:https://blog.csdn.net/qq_43265564/article/details/117366485
0
投稿
猜你喜欢
- 在上面的例子中多次使用到了Thread类的join方法。我想大家可能已经猜出来join方法的功能是什么了。对,join方法的功能就是使异步执
- Java中自动生成构造方法详解每个类在没有声明构造方法的前提下,会自动生成一个不带参数的构造方法,如果类一但声明有构造方法,就不会产生了.证
- 序言:此前,我们主要通过XML来书写SQL和填补对象映射关系。在SpringBoot中我们可以通过注解来快速编写SQL并实现数据访问。(仅需
- 首先要引用一下类库:using Ionic.Zip;这个类库可以到网上下载。下面对类库使用的封装方法:得到指定的输入流的ZIP压
- 概述企业内部一般都有一套单点登录系统(常用的实现有apereo cas),所有的内部系统的登录认证都对接它。本文介绍spring boot的
- 本文实例为大家分享了Unity实现俄罗斯方块的具体代码,供大家参考,具体内容如下一、使用SpriteRenderer作为小方块图片,创建7种
- 前言:在Java面试中,线程的状态也是被经常考察的知识点,今天我们就来聊一聊线程状态的那些事!线程在JVM中的状态查看线程在JVM中有哪些不
- 程序目的从java字节码层理解,为何i = i++后,结果是+1之前的数值。而i=++i后,结果是+1之后的值。关键指令iload_<
- 本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法。分享给大家供大家参考,具体如下:有
- 启动App进程Activity启动过程的一环是调用ActivityStackSupervisor.startSpecificActivity
- 定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。类型:行为类模式类图: 
- 相信大家都经常使用String 的split方法,但是大家有没有遇到下面的这种情况:大家想想下面的代码执行结果是什么public stati
- 看完我上一篇文章,「你都理解创建线程池的参数吗?」之后,当遇到这种问题,你觉得你完全能够唬住面试官了,50k轻松到手。殊不知,要是面试官此刻
- 实例如下:package com.huad.luck;import java.util.ArrayList;import java.util
- 概述RocketMQ 支持发送延迟消息,但不支持任意时间的延迟消息的设置,仅支持内置预设值的延迟时间间隔的延迟消息;预设值的延迟时间间隔为:
- C# 3.0为你提供了对象集合初始化器:/// <summary>/// 图书类/// </summary>publ
- Java中IO的模型分为三种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。BIO【同步阻塞】在JDK1.4出来之前,我们建立网
- 本文实例为大家分享了C语言实现俄罗斯方块的具体代码,供大家参考,具体内容如下GitHub:【C语言】实现俄罗斯方块源代码Head.h#ifn
- 需要用到 java 写一个 ftp 的工具,因为只有一点点 java 基础,但是由于好几年不用,几乎算是不会了,只好一点点来搞,还好能捡起来
- 查询数据会比较耗时,所以我们想把查询数据放在一个异步任务中,查询结果获得Cursor,然后在onPostExecute (Cursor re