第十二篇:SpringBoot 2.x数据校验

简介: 介绍在项目的过程中,对于参数的校验是必须的,如果参数比较少的话我们可以直接通过代码进行校验,但是数据较大时再用这个方法就比较笨重了,接下来就该我们的主角Validation闪亮登场了pom.

介绍

在项目的过程中,对于参数的校验是必须的,如果参数比较少的话我们可以直接通过代码进行校验,但是数据较大时再用这个方法就比较笨重了,接下来就该我们的主角Validation闪亮登场了

pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

实际上在这里数据校验都是调用的javax.validationspring-boot-starter-web中也包含了hibernate-validator,有兴趣的可以去翻翻文档

User.java

package com.priv.gabriel.entity;

import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;


/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-23
 * @Description:
 */
@Data
public class User {

    @NotBlank(message = "name不允许为空")
    @Length(min = 2,max = 10,message = "你的长度不对劲呀")
    private String name;
    @NotNull(message = "进入未成年人入内!")
    @Min(18)
    private int age;
    @NotBlank(message = "拒绝黑户")
    private String address;

}

接下来只需要在Controller层中使用@valid进行校验就可以了

package com.priv.gabriel.controller;

import com.priv.gabriel.entity.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;

/**
 * Created with Intellij IDEA.
 *
 * @Author: Gabriel
 * @Date: 2018-10-23
 * @Description:
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/check")
    public String check(@Valid User user){
        return "检测完毕!没有问题";
    }
}

Rest Client工具简单检测一下

img_885cdbaf8ec7ee336eb56d02868fbff5.png
image.png

结果当然是...

{
    "timestamp": "2018-10-23T09:01:45.159+0000",
    "status": 400,
    "error": "Bad Request",
    "errors": [{
        "codes": ["Length.user.name", "Length.name", "Length.java.lang.String", "Length"],
        "arguments": [{
            "codes": ["user.name", "name"],
            "arguments": null,
            "defaultMessage": "name",
            "code": "name"
        }, 10, 2],
        "defaultMessage": "你的长度不对劲呀",
        "objectName": "user",
        "field": "name",
        "rejectedValue": "",
        "bindingFailure": false,
        "code": "Length"
    }, {
        "codes": ["Min.user.age", "Min.age", "Min.int", "Min"],
        "arguments": [{
            "codes": ["user.age", "age"],
            "arguments": null,
            "defaultMessage": "age",
            "code": "age"
        }, 18],
        "defaultMessage": "最小不能小于18",
        "objectName": "user",
        "field": "age",
        "rejectedValue": 17,
        "bindingFailure": false,
        "code": "Min"
    }, {
        "codes": ["NotBlank.user.address", "NotBlank.address", "NotBlank.java.lang.String", "NotBlank"],
        "arguments": [{
            "codes": ["user.address", "address"],
            "arguments": null,
            "defaultMessage": "address",
            "code": "address"
        }],
        "defaultMessage": "拒绝黑户",
        "objectName": "user",
        "field": "address",
        "rejectedValue": "",
        "bindingFailure": false,
        "code": "NotBlank"
    }, {
        "codes": ["NotBlank.user.name", "NotBlank.name", "NotBlank.java.lang.String", "NotBlank"],
        "arguments": [{
            "codes": ["user.name", "name"],
            "arguments": null,
            "defaultMessage": "name",
            "code": "name"
        }],
        "defaultMessage": "name不允许为空",
        "objectName": "user",
        "field": "name",
        "rejectedValue": "",
        "bindingFailure": false,
        "code": "NotBlank"
    }],
    "message": "Validation failed for object='user'. Error count: 4",
    "path": "/user/check"
}

好了,到这里可以看到我们的设置已经生效了,关于数据校验你get到了吗?
项目下载地址

目录
相关文章
|
1月前
|
JSON JavaScript 前端开发
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
解决js中Long类型数据在请求与响应过程精度丢失问题(springboot项目中)
42 0
|
1月前
|
存储 搜索推荐 Java
|
3月前
|
SQL Java 数据库连接
Spring Boot - 构建数据访问层
Spring Boot - 构建数据访问层
41 0
|
2月前
|
数据采集 存储 缓存
SpringBoot与布隆过滤器的完美邂逅:高效防护大规模数据的奇妙结合【实战】
SpringBoot与布隆过滤器的完美邂逅:高效防护大规模数据的奇妙结合【实战】
98 0
|
4月前
|
JSON 前端开发 Java
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
利用Spring Boot处理JSON数据实战(包括jQuery,html,ajax)附源码 超详细
60 0
|
4月前
|
XML Java 数据格式
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
SpringBoot中yaml格式、语法规则及数据读取方式(3种)
203 0
|
4月前
|
XML Java 数据库连接
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
Spring Boot的数据访问之Spring Data JPA以及Hibernate的实战(超详细 附源码)
48 0
|
16天前
|
缓存 前端开发 Java
SpringBoot启动后加载初始化数据
SpringBoot启动后加载初始化数据
|
1月前
|
Java easyexcel 应用服务中间件
【二十五】springboot使用EasyExcel和线程池实现多线程导入Excel数据
【二十五】springboot使用EasyExcel和线程池实现多线程导入Excel数据
206 0
|
1月前
|
缓存 NoSQL Java
【九】springboot整合redis实现启动服务时热点数据保存在全局和缓存
【九】springboot整合redis实现启动服务时热点数据保存在全局和缓存
43 0