专栏首页mySoulSpring Boot数据校验
原创

Spring Boot数据校验

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

添加校验依赖

全部依赖文件如下

<?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.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</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>
            <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>

添加配置文件

user:
  name:
    size: 用户名长度不符合要求
  age:
    size: 年龄输入不正确

添加数据校验

package com.example.demo;

import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Size;

public class User {
    private Integer id;
    // 其长度
    @Size(min = 5, max = 10, message = "{user.name.size}")
    private String name;
    // 其上限和下限
    @DecimalMax(value = "200", message = "{user.age.size}")
    @DecimalMin(value = "5", message = "{user.age.size}")
    private Integer age;
	// 省去get和set
}

编写控制器

package com.example.demo;

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 java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {
    @PostMapping("/user")
    public List<String> addUser(@Validated User user, BindingResult bindingResult){
        List<String> errors = new ArrayList<>();
        // 非空
        if(bindingResult.hasErrors()){
            // 查找出Error 进行添加到结果集
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for (ObjectError allError : allErrors) {
                errors.add(allError.getDefaultMessage());
            }
        }
        return errors;
    }
}

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

测试

分组校验

添加分组接口

在实体类中添加分组信息

package com.example.demo;

import javax.validation.constraints.DecimalMax;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Size;

public class User {
    private Integer id;
    // 其长度
    @Size(min = 5, max = 10, message = "用户名长度不符合要求", groups = ValidationGroup1.class)
    private String name;
    // 其上限和下限
    @DecimalMax(value = "200", message = "年龄输入不正确", groups = ValidationGroup2.class)
    @DecimalMin(value = "5", message = "年龄输入不正确", groups = ValidationGroup2.class)
    private Integer age;

    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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

控制器使用其分组

package com.example.demo;

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 java.util.ArrayList;
import java.util.List;

@RestController
public class UserController {
    @PostMapping("/user")
    public List<String> addUser(@Validated(ValidationGroup2.class) User user, BindingResult bindingResult){
        List<String> errors = new ArrayList<>();
        // 非空
        if(bindingResult.hasErrors()){
            // 查找出Error 进行添加到结果集
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for (ObjectError allError : allErrors) {
                errors.add(allError.getDefaultMessage());
            }
        }
        return errors;
    }
}

测试结果

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 解释SpringBoot之Ehcache 2.x缓存

    [wp_editor_md_a364d1423e3bdfc4066b7266a02a2393.jpg]

    mySoul
  • Spring Security 基于数据库的认证

    [wp_editor_md_c80226e17602863cd62006de14c028b6.jpg]

    mySoul
  • Spring Batch之批处理实践

    Spring Batch 是Spring的子项目,基于Spring的批处理的框架,通过其可以构建出批量的批处理框架。

    mySoul
  • SpringCloud-Zuul服务网关[容错Hystrix]

      zuul作为网关服务,用来分配调度其他服务的,那么难免就会出现调用的服务出现问题的请求,或者用户访问急剧增多的情况,那么此时我们的网关服务就应该具有容错能力...

    用户4919348
  • Spring Boot · Mongo Repository

    本文节选自《Netkiller Java 手札》 http://www.netkiller.cn/java/ 11.12.5.1. MongoTempla...

    netkiller old
  • 关系数据构建反应式的spring驱动程序

    响应式编程或反应式编程(英语:Reactive programming)是一种面向数据流和变化传播的编程范式,直白的说就是:将变化的值通过数据流进行传播。

    边鹏 [进阶者]
  • ArangoDB与SpringData集成

    首先访问 https://start.spring.io 创建一个 spring-boot 项目。然后添加如下依赖

    kongxx
  • Spring boot with MySQL 实例参考

    节选择《Netkiller Java 手札》· Spring 框架 9.7. Spring boot with MySQL 9.7.1. Maven pom.x...

    netkiller old
  • Spring cloud 之 Feign Client

    本文接选自 《Netkiller Java 手札》 12.2.2. Eureka Client 12.2.2.1. Maven <project xmln...

    netkiller old
  • spring-boot - demo

    当我发现把最初的一个demo整的面目全非的时候,突然想要找一个简单的demo做测试,发现与其在原来的上面该,还不如新建一个demo。 官方入门:http://p...

    Ryan-Miao

扫码关注云+社区

领取腾讯云代金券