一、概述

在我们应用程序的业务逻辑中,经常会碰到参数校验的情况,手动的在代码层上面进行校验就会带来很不好的体验,阅读、维护的成本会大大增加,造成冗余。因此有了这个JSR 303。

Bean Validation为JavaBean提供了相应的API来给我们做参数的验证。通过Bean Validation比如@NotNull @Pattern等方法来对我们字段的值做进一步的教研。

Bean Validation 是一个运行时框架,在验证之后错误信息会直接返回。

完整的jar包:
javax.validation:validation-api:2.0.1.Final.jar 包

注意:SpringBoot2 项目web组件已经内置了这个依赖了

1
2
3
4
5
6
<!--添加依赖-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>

二、常用验证注解

@NotEmpty

不能为null,而且长度必须大于0(一般注解在集合属性上)

img

@NotBlank

@NotBlank只用于String,不能为null且trim()之后size>0

img

@NotNull

不能为null,但可以为empty;用在基本类型上

img

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.Date;

@Data
public class Test implements Serializable {

private static final long serialVersionUID = 1L;


@NotNull(message = "用户id不能为空")
private Long userId;

@NotBlank(message = "studentId不能为空")
private String studentId;

@NotEmpty(message = "课程id不能为空")
private List<String> courseIdS;


}

三、@Valid和@Validated的区分

1、@Valid

@Valid注解用于校验,所属包为:javax.validation.Valid。

①、首先需要在实体类的相应字段上添加用于充当校验条件的注解,如:@Min,如下代码(age属于Girl类中的属性):如上图

②、其次在controller层的方法的要校验的参数上添加@Valid注解,并且需要传入BindingResult对象,用于获取校验失败情况下的反馈信息,如下代码:

1
2
3
4
5
6
7
8
@PostMapping("/girls")  
public Girl addGirl(@Valid Girl girl, BindingResult bindingResult) {
if(bindingResult.hasErrors()){
System.out.println(bindingResult.getFieldError().getDefaultMessage());
return null;
}
return girlResposity.save(girl);
}

bindingResult.getFieldError.getDefaultMessage()用于获取相应字段上添加的message中的内容

2、@Validated

@Valid是javax.validation里的。

@Validated是@Valid 的一次封装,是Spring提供的校验机制使用,所属包: org.springframework.validation.annotation.Validated。

四、使用例子

未完待续…