繁体   English   中英

JSR-303如何以不同方式验证两个子对象

[英]JSR-303 How to validate two children objects differently

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

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

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

Form中的mainOwner字段上创建验证注释,验证Owner实例是否具有设置的驱动程序许可证。

@DriverLicenseValid注释应该遵循jsr-303规范中的建议,默认情况下null值有效。 因此您无需更改Owner类。

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

使用组:

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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM