我正在使用 hibernate 验证器组序列,并希望根据业务规则按顺序执行组。但 groupSequenceProvider 的 getValidationGroups 输入始终为 null,因此永远不会添加自定义序列。
我的请求对象:
@GroupSequenceProvider(BeanSequenceProvider.class)
public class MyBean {
@NotEmpty
private String name;
@NotNull
private MyType type;
@NotEmpty(groups = Special.class)
private String lastName;
// Getters and setters
}
枚举类型:
public enum MyType {
FIRST, SECOND
}
我的自定义序列提供者:
public class BeanSequenceProvider implements DefaultGroupSequenceProvider<MyBean> {
@Override
public List<Class<?>> getValidationGroups(MyBean object) {
final List<Class<?>> classes = new ArrayList<>();
classes.add(MyBean.class);
if (object != null && object.getType() == MyType.SECOND) {
classes.add(Special.class);
}
return classes;
}
}
分组注释:
public interface Special {
}
当我执行上面的代码时,我得到的输入MyBean对象为null,并且无法添加自定义序列。我缺少什么?我使用 hibernate-validator 版本为 5.4.1.Final
发生这种情况是因为,出于某种我不知道的原因,Hibernate 多次调用您的 BeanSequenceProvider,并且这些执行将 null 作为参数传递;不过,它应该仍然有效。
这就是为什么我们在创建 CustomerSequenceProvider 时需要进行空检查的原因。