Spring Boot 利用 @Valid 数据校验

SpringBoot 提供数据校验

通常情况下我们手动的进行判断,这样子很是麻烦,代码量显得很是繁琐,springboot为我们进行简化工作量。

基于 Hibernate Validator 提供了 JSR 规范中所有内置约束注解的实现,以及一些附加的约束注解,除此之外用户还可以自定义约束注解。

Spring Boot 的参数校验依赖于 hibernate-validator 来进行。使用 Hibernate Validator 校验数据,需要定义一个接收的数据模型,使用注解的形式描述字段校验的规则,以 User 对象为例如何使用。

其他的一些校验注解
Hibernate Validator 基本上包含了常用的数据校验,包括校验属性是否为空、长度、大小、特定格式等,完整的注解可以看下表:

注解	应用目标	运行时检查	Hibernate 元数据影响
@Length(min=, max=)	属性(String)	检查字符串长度是否符合范围	列长度会被设到最大值
@Max(value=)	属性(以 numeric 或者 string 类型来表示一个数字)	检查值是否小于或等于最大值	对列增加一个检查约束
@Min(value=)	属性(以 numeric 或者 string 类型来表示一个数字)	检查值是否大于或等于最小值	对列增加一个检查约束
@NotNull	属性	检查值是否非空(not null)	列不为空
@Past	属性(date 或 calendar)	检查日期是否是过去时	对列增加一个检查约束
@Future	属性(date 或 calendar)	检查日期是否是将来时	无
@Pattern(regex="regexp", flag=)	属性(string)	检查属性是否与给定匹配标志的正则表达式相匹配(见 java.util.regex.Pattern )	无
@Range(min=, max=)	属性(以 numeric 或者 string 类型来表示一个数字)	检查值是否在最小和最大值之间(包括临界值)	对列增加一个检查约束
@Size(min=, max=)	属性(array,collection,map)	检查元素大小是否在最小和最大值之间(包括临界值)	无
@AssertFalse	属性	检查方法的演算结果是否为 false(对以代码方式而不是注解表示的约束很有用)	无
@AssertTrue	属性	检查方法的演算结果是否为 true(对以代码方式而不是注解表示的约束很有用)	无
@Valid		属性(object)	对关联对象递归进行验证。如果对象是集合或数组,就递归地验证其元素;如果对象是 Map,则递归验证其值元素	无
@Email	属性(String)	检查字符串是否符合有效的 email 地址规范	无

环境以及版本:

SpringBoot : 2.0.5.RELEASE
JDK :1.8

maven 依赖
	<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>
		</dependency>

User类:

public class User   {
 
	@NotBlank(message = "不能为空。")
	@Length(min = 2,max = 10,message = "你的长度不对劲呀")
	private String name;
	@Max(value = 100,message = "不能大于100")
	private int age;
	@Max(value = 2,message = "111")
	private String url;
get  set 省略
}

Controller 数据校验

1 @Valid 表示对user这个对象进行校验
2 BindingResult 表示将校验不通过的结果数据绑定到此对象上。
@RestController
public class validController {

    @RequestMapping("test")
    public List<ObjectError> test(@Valid User user, BindingResult result) {
     
        if(result.hasErrors()){

            List<ObjectError> allErrors = result.getAllErrors();
            for (ObjectError error : allErrors) {
                System.out.println(error.getCode()+ "-" + error.getDefaultMessage());
            }
            return allErrors;
        }

        //List<User> list = userService.findAll();
        return null;
    }

}

测试:
在这里插入图片描述

结果

Length-你的长度不对劲呀
NotBlank-不能为空。

返回的json :


[
    {
        "codes": [
            "Max.user.age",
            "Max.age",
            "Max.int",
            "Max"
        ],
        "arguments": [
            {
                "codes": [
                    "user.age",
                    "age"
                ],
                "arguments": null,
                "defaultMessage": "age",
                "code": "age"
            },
            100
        ],
        "defaultMessage": "不能大于100",
        "objectName": "user",
        "field": "age",
        "rejectedValue": 190,
        "bindingFailure": false,
        "code": "Max"
    },
    {
        "codes": [
            "NotBlank.user.name",
            "NotBlank.name",
            "NotBlank.java.lang.String",
            "NotBlank"
        ],
        "arguments": [
            {
                "codes": [
                    "user.name",
                    "name"
                ],
                "arguments": null,
                "defaultMessage": "name",
                "code": "name"
            }
        ],
        "defaultMessage": "不能为空。",
        "objectName": "user",
        "field": "name",
        "rejectedValue": "",
        "bindingFailure": false,
        "code": "NotBlank"
    },
    {
        "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"
    }
]

期间遇到问题:

1 一直揭没有提示 @Valid 这个注解,刷新maven 或者重新下载 springboot 依赖。
2 不用导入javax.validxxx验证包(会跟默认的验证冲突,导致服务不能启动),此包在springboot中内置会下载。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TizzyGoodhealth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值