开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第29天,点击查看活动详情
之前常看到别人的代码或者项目中,在Bean上使用了数据校验的注解,比如说:@NotBlank:表示注入Bean属性时,该属性必须注入,不能为空。,看着简单,但在自己使用时总是出现一些问题,现在完整的来一遍。注意是Web工程使用。
导包
@NotBlank并不是JDK自带的,它需要下面这个依赖(不要说你不知道Maven)。
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.1.5.Final</version>
</dependency>
加上这个依赖包后,就能在属性上加上这个注解。
@Data
@ToString
public class User {
@NotBlank
private String username;
}
Controller
在Controller的方法参数中,会接收参数封装到对应的Bean中,对应上面这个User类,比如说有下面这个UserController,方法edit接收User,方法体打印user
@Controller
@RequestMapping("/user")
public class UserController{
@PostMapping("/edit")
public void edit(User user){
System.out.Println(user); // 打印一个user~
}
}
光这样写Controller还不行,因为这个User user 是需要被校验的。所以得有个标识(注解),告诉Spring这个参数需要校验。在参数前加上:@Validated即可。
...
public void edit(@Validated User user){
System.out.Println(user); // 打印一个user~
}
...
配置类
稍等,最后一步,在配置类中注册一个Bean即可。属性上的校验工作就交给这个Bean啦(Spring YYDS)
@Override
public Validator getValidator() {
LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
validatorFactoryBean.setProviderClass(HibernateValidator.class);
return validatorFactoryBean;
}
这时候可以用PostMan模拟数据发送,如果不没有这个username的话,就会报这个错:
Field error in object 'user' on field 'username': rejected value [null];
这个就表示@NotBlank起作用了。
其他常用的校验注解
以下引自:从 0 开始深入学习 Spring - LinkedBear - 掘金小册 (juejin.cn),感谢作者的整理和分享。更多内容可以关注该作者的小册,诚心推荐~
| 注解 | 作用 |
|---|---|
| @Null | 必须为 null |
| @NotNull | 限制必须不为 null |
| @NotEmpty | 验证注解的元素值不为 null 且不为空(字符串不为空串,数组、集合不为空) |
| @NotBlank | 验证注解的元素值不为空(不为 null 、去除空格类字符后长度不为空串) |
| @AssertFalse | 限制必须为 false |
| @AssertTrue | 限制必须为 true |
| @Max(value) | 限制必须为一个不大于指定值的数字 |
| @Min(value) | 限制必须为一个不小于指定值的数字 |
| @Pattern(value) | 限制必须符合指定的正则表达式 |
| @Size(min=?, max=?) | 限制元素大小必须为指定范围内(字符串的长度,数组、集合的大小) |
| @Length(min=,max=) | 仅限制字符串的长度必须为指定范围内 |
| @Range(min=,max=) | 限制指定的值必须在指定范围内(限定数值型数据) |
| @URL | 限制字符串必须为 url 类型的格式 |
也是为了方便自己记忆啦。