先定義一個Person對象麸粮。
@Data
public class Person {
?? ? ? @NotBlank(message = “年齡不能為空” )
private Integer age; //年齡
private String name;//姓名
}
需求如下:
age <= 10 的時候不需要驗證 name 為空。
Age > 10 的時候需要驗證 name 非空操作。
這就涉及到動態(tài)添加驗證功能己肮。實現(xiàn)思路為動態(tài)的添加組來達(dá)到驗證效果,這時候就需要用到 @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,則添加此組來進(jìn)行驗證
? ? ? ? ? ? ? ? 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 來進(jìn)行驗證的時候组底,就可以動態(tài)驗證了。