数据校验是一个相当重要的环节,使用Spring Boot 进行数据校验。添加校验依赖

Spring Boot数据校验_SpringBoot

Spring Boot数据校验_SpringBoot_02

全部依赖文件如下

  1. <?xml version="1.0" encoding="UTF-8"?>

  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

  4. <modelVersion>4.0.0</modelVersion>

  5. <parent>

  6. <groupId>org.springframework.boot</groupId>

  7. <artifactId>spring-boot-starter-parent</artifactId>

  8. <version>2.3.1.RELEASE</version>

  9. <relativePath/> <!-- lookup parent from repository -->

  10. </parent>

  11. <groupId>com.example</groupId>

  12. <artifactId>demo</artifactId>

  13. <version>0.0.1-SNAPSHOT</version>

  14. <name>demo</name>

  15. <description>Demo project for Spring Boot</description>

  16.  

  17. <properties>

  18. <java.version>1.8</java.version>

  19. </properties>

  20.  

  21. <dependencies>

  22. <dependency>

  23. <groupId>org.springframework.boot</groupId>

  24. <artifactId>spring-boot-starter-validation</artifactId>

  25. </dependency>

  26. <dependency>

  27. <groupId>org.springframework.boot</groupId>

  28. <artifactId>spring-boot-starter-web</artifactId>

  29. </dependency>

  30.  

  31. <dependency>

  32. <groupId>org.springframework.boot</groupId>

  33. <artifactId>spring-boot-starter-test</artifactId>

  34. <scope>test</scope>

  35. <exclusions>

  36. <exclusion>

  37. <groupId>org.junit.vintage</groupId>

  38. <artifactId>junit-vintage-engine</artifactId>

  39. </exclusion>

  40. </exclusions>

  41. </dependency>

  42. </dependencies>

  43.  

  44. <build>

  45. <plugins>

  46. <plugin>

  47. <groupId>org.springframework.boot</groupId>

  48. <artifactId>spring-boot-maven-plugin</artifactId>

  49. </plugin>

  50. </plugins>

  51. </build>

  52.  

  53. </project>

添加配置文件
  1. user:

  2. name:

  3. size: 用户名长度不符合要求

  4. age:

  5. size: 年龄输入不正确

添加数据校验
  1. package com.example.demo;

  2.  

  3. import javax.validation.constraints.DecimalMax;

  4. import javax.validation.constraints.DecimalMin;

  5. import javax.validation.constraints.Size;

  6.  

  7. public class User {

  8. private Integer id;

  9. // 其长度

  10. @Size(min = 5, max = 10, message = "{user.name.size}")

  11. private String name;

  12. // 其上限和下限

  13. @DecimalMax(value = "200", message = "{user.age.size}")

  14. @DecimalMin(value = "5", message = "{user.age.size}")

  15. private Integer age;

  16. // 省去get和set

  17. }

编写控制器
  1. package com.example.demo;

  2.  

  3. import org.springframework.validation.BindingResult;

  4. import org.springframework.validation.ObjectError;

  5. import org.springframework.validation.annotation.Validated;

  6. import org.springframework.web.bind.annotation.PostMapping;

  7. import org.springframework.web.bind.annotation.RestController;

  8.  

  9. import java.util.ArrayList;

  10. import java.util.List;

  11.  

  12. @RestController

  13. public class UserController {

  14. @PostMapping("/user")

  15. public List<String> addUser(@Validated User user, BindingResult bindingResult){

  16. List<String> errors = new ArrayList<>();

  17. // 非空

  18. if(bindingResult.hasErrors()){

  19. // 查找出Error 进行添加到结果集

  20. List<ObjectError> allErrors = bindingResult.getAllErrors();

  21. for (ObjectError allError : allErrors) {

  22. errors.add(allError.getDefaultMessage());

  23. }

  24. }

  25. return errors;

  26. }

  27. }

其中BindingResult 类是用于保存错误信息的

测试

Spring Boot数据校验_SpringBoot_03

分组校验

添加分组接口

Spring Boot数据校验_SpringBoot_04

在实体类中添加分组信息

  1. package com.example.demo;

  2.  

  3. import javax.validation.constraints.DecimalMax;

  4. import javax.validation.constraints.DecimalMin;

  5. import javax.validation.constraints.Size;

  6.  

  7. public class User {

  8. private Integer id;

  9. // 其长度

  10. @Size(min = 5, max = 10, message = "用户名长度不符合要求", groups = ValidationGroup1.class)

  11. private String name;

  12. // 其上限和下限

  13. @DecimalMax(value = "200", message = "年龄输入不正确", groups = ValidationGroup2.class)

  14. @DecimalMin(value = "5", message = "年龄输入不正确", groups = ValidationGroup2.class)

  15. private Integer age;

  16.  

  17. public Integer getId() {

  18. return id;

  19. }

  20.  

  21. public void setId(Integer id) {

  22. this.id = id;

  23. }

  24.  

  25. public String getName() {

  26. return name;

  27. }

  28.  

  29. public void setName(String name) {

  30. this.name = name;

  31. }

  32.  

  33. public Integer getAge() {

  34. return age;

  35. }

  36.  

  37. public void setAge(Integer age) {

  38. this.age = age;

  39. }

  40. }

控制器使用其分组

  1. package com.example.demo;

  2.  

  3. import org.springframework.validation.BindingResult;

  4. import org.springframework.validation.ObjectError;

  5. import org.springframework.validation.annotation.Validated;

  6. import org.springframework.web.bind.annotation.PostMapping;

  7. import org.springframework.web.bind.annotation.RestController;

  8.  

  9. import java.util.ArrayList;

  10. import java.util.List;

  11.  

  12. @RestController

  13. public class UserController {

  14. @PostMapping("/user")

  15. public List<String> addUser(@Validated(ValidationGroup2.class) User user, BindingResult bindingResult){

  16. List<String> errors = new ArrayList<>();

  17. // 非空

  18. if(bindingResult.hasErrors()){

  19. // 查找出Error 进行添加到结果集

  20. List<ObjectError> allErrors = bindingResult.getAllErrors();

  21. for (ObjectError allError : allErrors) {

  22. errors.add(allError.getDefaultMessage());

  23. }

  24. }

  25. return errors;

  26. }

  27. }

测试结果

Spring Boot数据校验_SpringBoot_05

 

Spring Boot数据校验_SpringBoot_06

小明菜市场