一般情况下,我们后端进行字段一些校验有可能用到很多if-else语句,那么我们在springboot中该如何优雅的校验字段呢。现在登录我们的主角spring-boot-starter-validation
不想看文字的也可以直接查看视频 点击 springboot字段校验视频
首先我们新建一个springboot项目,打开idea
next
选择java version为8,然后点击下一步
点击next
创建完成后我们的项目目录结构。
pom.xml文件引入的依赖
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.6</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.toutiao</groupId>
<artifactId>valid-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>valid-test</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我们创建一个FormData类
package com.toutiao.validtest.entity;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
public class FormData {
//唯一标识符为空
@NotBlank(message = "用户id不能为空")
private String uid;
//用户名称只能是字母和数字
@Pattern(regexp = "^[a-z0-9]+#34;, message = "用户名称只能是小写字母或数字")
@Length(max = 12, message = "用户名称长度最大只能为12")
private String username;
//数据集名称只能是字母和数字
@Pattern(regexp = "^[A-Za-z0-9]+#34;, message = "密码只能是字母或数字")
//文件名称过长
@Length(max = 12, message = "密码不能大于12")
//文件名称为空
@NotBlank(message = "密码不能为空")
private String password;
//数据集描述最多为256字节
@Length(max = 256, message = "介绍最大只能为256位")
//数据集描述为空
@NotBlank(message = "介绍不能为空")
private String intro;
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getIntro() {
return intro;
}
public void setIntro(String intro) {
this.intro = intro;
}
}
我们创建一个测试controller
TestController
package com.toutiao.validtest.controller;
import com.toutiao.validtest.entity.FormData;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author joy
* @email 413735709@qq.com
* @date 2021/11/7 9:04 下午
*/
@Controller
@RequestMapping("test")
public class TestController {
@PostMapping(value = "/checkData")
@ResponseBody
public Object checkData(@RequestBody @Valid FormData formData, BindingResult result){
// 如果校验不通过,输出错误信息
if (result.hasErrors()) {
List<FieldError> fieldErrors = result.getFieldErrors();
Map<String, Object> map = new HashMap<>();
for (FieldError fieldError : fieldErrors) {
String field = fieldError.getField();
String defaultMessage = fieldError.getDefaultMessage();
map.put(field, defaultMessage);
}
return map;
}
return "ok";
}
}
我们打开postman进行测试,我们在什么都不输入的情况下,点击send
我们输入用户id
输入密码
这样就简单的实现了,我们用@Valid注解校验字段。
springboot的常用校验字段注解说明
注解 | 说明 |
@Length(min=1,max=10) | 检查所属的字段的长度是否在min和max之间,只能用户字符串 |
@Range(min=,max=,message=) | 必须在合适的范围内 |
@Max | 该字段的值只能小于或等于该值 |
@Min | 该字段的值只能大于或等于该值 |
@NotNull | 不能为null |
@NotBlank | 不能为空,检查时会将空格忽略 |
@NotEmpty | 不能为空,这里的空是指空字符串 |
@Pattern(regex=) | 必须符合指定的正则表达式 |
本文暂时没有评论,来添加一个吧(●'◡'●)