在之前的文章中,我们介绍了SpringBoot整合JSR-303规则来完成数据校验操作。接下来我们来聊一聊关于数据校验的具体用法。
之前的文章中举过一个简单的例子通过学生信息提交的例子来介绍了关于数据校验如何去做。那么接下来这篇文章,我们就来看看对于一些复杂的数据校验如何完成。
分组
简单的举个例子,假设在添加学生的时候,不需要传入学号,但是在修改学生信息的时候需要传入学号,并且这个时候都是使用同一个参数对象来进行接收参数,那么这个时候,这样的数据校验如何去完成?
遇到上面这种情况,就需要对学号进行分情况讨论了。专业一点的说法叫做分组校验,什么意思呢?就是说将所有新增相关的接口看作一组,这个时候是不需要执行非空校验的。而所有修改相关的接口看作一个分组,在这个分组规则中是需要进行非空校验的。
在之前提过的所有的数据校验规则的注解中都有一个groups的属性,这里简单的拿@NotNull做个演示,代码如下。
@Target({
METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(List.class)
@Documented
@Constraint(validatedBy = {
})
public @interface NotNull {
String message() default "{javax.validation.constraints.NotNull.message}";
Class<?>[] groups() default {
};
Class<? extends Payload>[] payload() default {
};
/**
* Defines several {@link NotNull} annotations on the same element.
*
* @see javax.validation.constraints.NotNull
*/
@Target({
METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List