3

我使用 Hibernate Validator 作为 JSR-303 实现。

假设我有:

class Form {
    @Valid
    private Owner mainOwner;
    @Valid
    private Owner secondOwner;
    // ... many other fields
}

class Owner {
    @DriverLicenseValid // some custom validation
    private String driverLicense;
    // ... many other fields
}

// ...

Form myForm;
validator.validate(myForm);

看,我想验证整个表单,它包含两个相似的所有者类型的子对象。问题是对于 mainOwner driverLicense 应该是 @NotNull 而对于 secondOwner 它应该是 @Null。

我不能在这里使用组(可以吗?),因为整个模型是由单个 validate() 调用检查的。有没有办法在不将此规则编写为表单级别的自定义约束的情况下解决此问题?

4

3 回答 3

0

如果您使用 Hibernate Validator 4.x,则可以使用本论坛帖子中描述的自定义组序列提供程序。

于 2013-04-16T21:16:55.410 回答
0

mainOwner在字段中创建验证注释,以Form验证Owner实例是否具有设置的驾驶执照。

@DriverLicenseValid注释应该遵循 jsr-303 规范中的建议,即默认null值是有效的。所以你不需要改变Owner类。

于 2013-04-16T14:26:00.770 回答
0

使用组:

class Form {
    @Valid
    @ConvertGroup(from=Default.class, to=NotNullDriversLicense.class)
    private Owner mainOwner;
    @Valid
    @ConvertGroup(from=Default.class, to=NullDriversLicense.class)
    private Owner secondOwner;
    // ... many other fields
}

class Owner {
    @Null(groups = NullDriversLicense.class)
    @NotNull(groups = NotNullDriversLicense.class)
    private String driverLicense;
    // ... many other fields
}

interface NullDriversLicense {}
interface NotNullDriversLicense {}

// ...

Form myForm;
validator.validate(myForm);
于 2019-04-11T05:14:18.813 回答