文章目录
Spring Validation框架
关于Spring Validation
Spring Validation框架的主要作用是检查方法的参数的基本有效性。
添加依赖
此框架的依赖项的artifactId为:spring-boot-starter-validation。
<!-- Spring Boot支持Spring Validation用于检查方法参数的基本有效性的依赖项 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
<version>2.5.0</version>
</dependency>
检查封装的请求参数
需要先在方法的参数(封装的类型)前添加@Valid或@Validated注解,以表示“将检查此参数的基本有效性”,例如:
@PostMapping("/add-new")
public String addNew(@Valid AlbumAddNewParam albumAddNewParam) {
albumService.addNew(albumAddNewParam);
return "添加成功!";
}
然后,需要在封装的类型的属性上添加检查注解,以配置对应的检查规则,例如:
@Data
public class AlbumAddNewParam implements Serializable {
@NotNull
private String name;
}
经过以上配置,参数name将不允许为null值,如果客户端提交的请求中没有name的值,将直接响应400错误!
需要注意:Spring Validation在检查请求参数的格式时,会检查所有属性配置的规则,找出所有的错误,如果希望实现“只要发现错误,就不再向后检查”,需要将其配置为“快速失败”,配置做法是使用配置类:
@Slf4j
@Configuration
public class ValidationConfiguration {
public ValidationConfiguration() {
log.debug("创建配置类对象:ValidationConfiguration");
}
@Bean
public javax.validation.Validator validator() {
return Validation.byProvider(HibernateValidator.class)
.configure() // 开始配置
.failFast(true) // 配置快速失败
.buildValidatorFactory() // 构建Validator工厂
.getValidator(); // 从Validator工厂中获取Validator对象
}
}
常用的检查注解有:
- @NotNull:不允许为null值
- 可以用于任何类型
- @NotEmpty:不允许为空字符串(长度为0的字符串),并且会检查是否为null值(为null时报错)
- 仅能用于字符串类型的参数
- @NotBlank:不允许为空白,即不允许是“仅由空格、TAB等空白值组成的字符串”
- 仅能用于字符串类型的参数
- @Range:通过配置min和max属性来限制数值类型参数的值区间,它不会检查是否为null(为null并不执行任何检查,且不会报错)
- 仅能用于整型参数
- @Pattern:通过配置regexp属性来配置正则表达式
- 仅能用于字符串类型的参数