普通校验是最基础的,也很简单。
下面开始springboot普通校验.github:https://github.com/fengqing11/springboot-validation
创建项目,依赖如下:
<?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.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>xyz.fengqing11</groupId>
<artifactId>springboot-validation</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-validation</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-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
创建配置数据,ValidationMessages.properties
:
user.name.size=用户名长度在5~10个字符之间
user.address.notnull=用户地址不能为空
user.age.size=年龄输入不正确
user.email.notnull=邮箱不能为空
user.email.pattern=邮箱格式不正确
注意文件的位置,名字是特定的,别写错了。
创建Controller:
package xyz.fengqing11.springbootvalidation.controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import xyz.fengqing11.springbootvalidation.pojo.User;
import java.util.ArrayList;
import java.util.List;
@RestController
public class UserController {
@PostMapping("/user")
public List<String> addUser(@Validated User user, BindingResult result){
List<String> errors = new ArrayList<>();
if (result.hasErrors()){
List<ObjectError> allErrors = result.getAllErrors();
for (ObjectError error : allErrors){
errors.add(error.getDefaultMessage());
}
}
return errors;
}
}
运行结果:
访问:http://127.0.0.1:8080/user
访问:http://127.0.0.1:8080/user?name=张三&address=江西南昌&age=10&email=555
分组校验:有的时候,开发者在一个实体类中定义了很多的校验规则,但是在某一次的业务处理中,并不需要这么多的校验规则,此时就可以使用分组校验规则。
首先需要创建两个分组接口:
package xyz.fengqing11.springbootvalidation.validation;
public interface ValidationGroup1 {
}
package xyz.fengqing11.springbootvalidation.validation;
public interface ValidationGroup2 {
}
实体类修改为:
package xyz.fengqing11.springbootvalidation.pojo;
import javax.validation.constraints.*;
import xyz.fengqing11.springbootvalidation.validation.*;
public class User {
private Integer id;
@Size(min = 5, max = 10, message = "{user.name.size}",groups = ValidationGroup1.class)
private String name;
@NotNull(message = "{user.address.notnull}")
private String address;
@DecimalMin(value = "1", message = "{user.age.size}")
@DecimalMax(value = "200", message = "{user.age.size}")
private Integer age;
@Email(message = "{user.email.pattern}")
@NotNull(message = "{user.email.notnull}",groups = ValidationGroup2.class)
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
控制器做如下修改:
package xyz.fengqing11.springbootvalidation.controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import xyz.fengqing11.springbootvalidation.pojo.User;
import xyz.fengqing11.springbootvalidation.validation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
public class UserController {
@PostMapping("/user")
public List<String> addUser(@Validated(ValidationGroup2.class) User user, BindingResult result){
List<String> errors = new ArrayList<>();
if (result.hasErrors()){
List<ObjectError> allErrors = result.getAllErrors();
for (ObjectError error : allErrors){
errors.add(error.getDefaultMessage());
}
}
return errors;
}
}
这里使用ValidationGroup2校验规则,意思是就只校验邮箱是否为空。
-end-