Spring基础篇:数据校验

113 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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 类型的格式

也是为了方便自己记忆啦。