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

作者: 九眼桥吴彦祖 | 来源:发表于2018-10-23 17:11 被阅读85次

    介绍

    在项目的过程中,对于参数的校验是必须的,如果参数比较少的话我们可以直接通过代码进行校验,但是数据较大时再用这个方法就比较笨重了,接下来就该我们的主角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工具简单检测一下

    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到了吗?
    项目下载地址

    相关文章

      网友评论

        本文标题:第十二篇:SpringBoot 2.x数据校验

        本文链接:https://www.haomeiwen.com/subject/tmsazftx.html