Hibernate -validator 组序列提供程序 getDefaultSequenceProvider 获取 null 作为输入

问题描述 投票:0回答:1

我正在使用 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

spring spring-boot hibernate-validator
1个回答
0
投票

发生这种情况是因为,出于某种我不知道的原因,Hibernate 多次调用您的 BeanSequenceProvider,并且这些执行将 null 作为参数传递;不过,它应该仍然有效。

这就是为什么我们在创建 CustomerSequenceProvider 时需要进行空检查的原因。

© www.soinside.com 2019 - 2024. All rights reserved.