SpringBoot 使用注解校验

原创
2020/05/06 00:28
阅读数 1.2K

数据校验一般分三个阶段:客户端校验,服务端校验,数据库校验。

我们为了对性能的要求,数据库校验基本已经不做了,现在尤为重要的是服务端校验。

 

一、添加依赖

首先编辑项目的 pom.xml 文件,添加数据校验相关的依赖。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

 

二、配置校验文件

也可以不用配置,直接写在注解的 message 属性上面。

在 resources 目录下创建一个 ValidationMessages.properties 文件(默认的创建校验出错的提示文件)。如下:

user.username.notnull=用户名不能为空
user.password.size=密码长度在6-20字符之间
user.password.notnull=密码不能为空

如果存在乱码,需要设置idea的文件类型,编辑器就会自动对中文内容进行转码。

 

三、编写代码

1、编写实体类,添加校验注解。

@Data
public class Demo {

    @NotBlank(message = "{user.username.notnull}")
    private String username;

    @NotBlank(message = "{user.password.notnull}")
    @Size(max = 20, min = 6, message = "{user.password.size}")
    private String password;

}

 

2、在Controller中的请求方法参数里面加@Validated注解,否则实体类中校验注解无法生效。后面的 BindingResult 参数表示在校验出错时保存的出错信息。

@RestController
@RequestMapping("/demo")
public class DemoController {

    @PostMapping("/add")
    public List<String> add(@Validated Demo demo, BindingResult result) {
        List<String> errors = new ArrayList<>();
        // 如果 BindingResult 的 hasErrors 方法返回true,则表示有错误信息
        if (result.hasErrors()) {
            List<ObjectError> allErrors = result.getAllErrors();
            /// 遍历错误信息,返回给前端
            for (ObjectError error : allErrors) {
                errors.add(error.getDefaultMessage());
            }
        }
        return errors;
    }

}

 

四、验证结果

我们请求上面的接口查看结果。

看到这个返回结果我们就可以代码就成功了。

 

五、校验注解参考表

验证注解 验证的数据类型 说明
空检查
@Null 任意类型 验证注解的元素值是 null
@NotNull 任意类型 验证注解的元素不是 null
@NotBlank CharSequence 子类型(CharBuffer、String、StringBuffer、StringBuilder) 验证注解的元素值不为空(不为 null、去除首尾空格后长度不为 0),不同于 @NotEmpty,@NotBlank 只应用于字符串且在比较时会去除字符串的首尾空格
@NotEmpty CharSequence 子类型、Collection、Map、数组 验证注解的元素值不为 null 且不为空(字符串长度不为 0、集合大小不为 0)
Boolean检查
@AssertFalse Boolean,boolean 验证注解的元素值是 false
@AssertTrue Boolean,boolean 验证注解的元素值是 true
长度检查
@Size(min=下限, max=上限) 字符串、Collection、Map、数组等

验证注解的元素值的在 min 和 max(包含)指定区间之内,如字符长度、集合大小

@Length(min=下限, max=上限) CharSequence 子类型 验证注解的元素值长度在 min 和 max 区间内
日期检查
@Past java.util.Date,java.util.Calendar,Joda-Time 类库的日期类型 验证注解的元素值(日期类型)比当前时间早
@Future 与 @Past 要求一样 验证注解的元素值(日期类型)比当前时间晚
@PastOrPresent 与 @Past 要求一样 验证注解的元素值(日期类型)比当前时间早,或者是当前时间
@FutureOrPresent 与 @Past 要求一样 验证注解的元素值(日期类型)比当前时间晚,或者是当前时间
数值检查
@MIN(value=值) BigDecimal,BigInteger, byte,short, int, long,等任何 Number 或 CharSequence(存储的是数字)子类型 验证注解的元素值大于等于 @Min 指定的 value 值
@MAX(value=值) 和 @Min 要求一样 验证注解的元素值小于等于 @Max 指定的 value 值
@DecimalMin(value=值) 和 @Min 要求一样 验证注解的元素值大于等于 @ DecimalMin 指定的 value 值
@DecimalMax(value=值) 和 @Min 要求一样 验证注解的元素值小于等于 @ DecimalMax 指定的 value 值
@Digits(integer=整数位数, fraction=小数位数) 和 @Min 要求一样 验证注解的元素值的整数位数和小数位数上限
@Range(min=最小值, max=最大值) BigDecimal,BigInteger,CharSequence,byte,short,int,long等原子类型和包装类型 验证注解的元素值在最小值和最大值之间
@Negative 和 @Range 要求一样 验证注解的元素必须是负数
@NegativeOrZero 和 @Range 要求一样 验证注解的元素必须是负数或 0
@Positive 和 @Range 要求一样 验证注解的元素必须是正数
@PositiveOrZero 和 @Range 要求一样 验证注解的元素必须是正数或 0
其他检查
@Valid 任何非原子类型 指定递归验证关联的对象;如用户对象中有个地址对象属性,如果想在验证用户对象时一起验证地址对象的话,在地址对象上加 @Valid 注解即可级联验证
@Pattern(regexp=正则表达式,flag=标志的模式) CharSequence 的子类型 验证注解的元素值与指定的正则表达式匹配
@Email(regexp=正则表达式,flag=标志的模式) CharSequence 的子类型 验证注解的元素值是 Email,也可以通过 regexp 和 flag 指定自定义的 email 格式
@CreditCardNumber CharSequence 的子类型 验证注解元素值是信用卡卡号
@ScriptAssert(lang= ,script=) 业务类 校验复杂的业务逻辑

 

 

更多阅读

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部