先定义一个Person对象。
@Data
public class Person {
@NotBlank(message = “年龄不能为空” )
private Integer age; //年龄
private String name;//姓名
}
需求如下:
age <= 10 的时候不需要验证 name 为空。
Age > 10 的时候需要验证 name 非空操作。
这就涉及到动态添加验证功能。实现思路为动态的添加组来达到验证效果,这时候就需要用到 @GroupSequenceProvider 注解。
解决方法如下:
首先添加一个在Person定义一个组
@Data
public class Person {
@NotBlank(message = “年龄不能为空” )
private Integer age; //年龄
public interface CheckNameGroup{}
private String name;//姓名
}
其次定义一个provider:
import org.hibernate.validator.spi.group.DefaultGroupSequenceProvider;
import java.util.ArrayList;
import java.util.List;
public class PersonProvider implements DefaultGroupSequenceProvider<Person> {
@Override
public List> getValidationGroups(Person person) {
List> defaultGroupSequence = new ArrayList<>();
defaultGroupSequence.add(Person.class); //注意这里不要写错
if (person != null) {
Integer age = person();
if (age >= 10) { //判断年龄,如果大于10,则添加此组来进行验证
defaultGroupSequence.add(CheckNameGroup.class);
}
}
return defaultGroupSequence;
}
}
最后在需要验证的Person类上添加@GroupSequenceProvider 注解
@Data
@GroupSequenceProvider(PersonProvider.class)
public class Person {
@NotBlank(message = “年龄不能为空” )
private Integer age; //年龄
public interface CheckNameGroup{}
private String name;//姓名
}
至此,再通过hibernate validator 来进行验证的时候,就可以动态验证了。
网友评论