Spring Boot数据校验 - 知乎

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

添加校验依赖

全部依赖文件如下

  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. <properties>
  17. <java.version>1.8</java.version>
  18. </properties>
  19. <dependencies>
  20. <dependency>
  21. <groupId>org.springframework.boot</groupId>
  22. <artifactId>spring-boot-starter-validation</artifactId>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-web</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. <exclusions>
  33. <exclusion>
  34. <groupId>org.junit.vintage</groupId>
  35. <artifactId>junit-vintage-engine</artifactId>
  36. </exclusion>
  37. </exclusions>
  38. </dependency>
  39. </dependencies>
  40. <build>
  41. <plugins>
  42. <plugin>
  43. <groupId>org.springframework.boot</groupId>
  44. <artifactId>spring-boot-maven-plugin</artifactId>
  45. </plugin>
  46. </plugins>
  47. </build>
  48. </project>

添加配置文件

  1. user:
  2. name:
  3. size: 用户名长度不符合要求
  4. age:
  5. size: 年龄输入不正确

添加数据校验

  1. package com.example.demo;
  2. import javax.validation.constraints.DecimalMax;
  3. import javax.validation.constraints.DecimalMin;
  4. import javax.validation.constraints.Size;
  5. public class User {
  6. private Integer id;
  7. // 其长度
  8. @Size(min = 5, max = 10, message = "{user.name.size}")
  9. private String name;
  10. // 其上限和下限
  11. @DecimalMax(value = "200", message = "{user.age.size}")
  12. @DecimalMin(value = "5", message = "{user.age.size}")
  13. private Integer age;
  14. // 省去get和set
  15. }

编写控制器

  1. package com.example.demo;
  2. import org.springframework.validation.BindingResult;
  3. import org.springframework.validation.ObjectError;
  4. import org.springframework.validation.annotation.Validated;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. @RestController
  10. public class UserController {
  11. @PostMapping("/user")
  12. public List<String> addUser(@Validated User user, BindingResult bindingResult){
  13. List<String> errors = new ArrayList<>();
  14. // 非空
  15. if(bindingResult.hasErrors()){
  16. // 查找出Error 进行添加到结果集
  17. List<ObjectError> allErrors = bindingResult.getAllErrors();
  18. for (ObjectError allError : allErrors) {
  19. errors.add(allError.getDefaultMessage());
  20. }
  21. }
  22. return errors;
  23. }
  24. }

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

测试

分组校验

添加分组接口

在实体类中添加分组信息

  1. package com.example.demo;
  2. import javax.validation.constraints.DecimalMax;
  3. import javax.validation.constraints.DecimalMin;
  4. import javax.validation.constraints.Size;
  5. public class User {
  6. private Integer id;
  7. // 其长度
  8. @Size(min = 5, max = 10, message = "用户名长度不符合要求", groups = ValidationGroup1.class)
  9. private String name;
  10. // 其上限和下限
  11. @DecimalMax(value = "200", message = "年龄输入不正确", groups = ValidationGroup2.class)
  12. @DecimalMin(value = "5", message = "年龄输入不正确", groups = ValidationGroup2.class)
  13. private Integer age;
  14. public Integer getId() {
  15. return id;
  16. }
  17. public void setId(Integer id) {
  18. this.id = id;
  19. }
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public Integer getAge() {
  27. return age;
  28. }
  29. public void setAge(Integer age) {
  30. this.age = age;
  31. }
  32. }

控制器使用其分组

  1. package com.example.demo;
  2. import org.springframework.validation.BindingResult;
  3. import org.springframework.validation.ObjectError;
  4. import org.springframework.validation.annotation.Validated;
  5. import org.springframework.web.bind.annotation.PostMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. @RestController
  10. public class UserController {
  11. @PostMapping("/user")
  12. public List<String> addUser(@Validated(ValidationGroup2.class) User user, BindingResult bindingResult){
  13. List<String> errors = new ArrayList<>();
  14. // 非空
  15. if(bindingResult.hasErrors()){
  16. // 查找出Error 进行添加到结果集
  17. List<ObjectError> allErrors = bindingResult.getAllErrors();
  18. for (ObjectError allError : allErrors) {
  19. errors.add(allError.getDefaultMessage());
  20. }
  21. }
  22. return errors;
  23. }
  24. }

测试结果

微信公众号

http://weixin.qq.com/r/fD93b3TE_imFrTAM92pu (二维码自动识别)


原网址: 访问
创建于: 2021-08-23 18:14:43
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论