【问题标题】:Java - Validating more than one field with only one annotationJava - 仅使用一个注释验证多个字段
【发布时间】:2021-10-09 17:50:12
【问题描述】:

我发现了一个类似的问题和答案-> How can I validate two or more fields in combination?

但我想在不使用继承的情况下使其可重用。

例如,我想写一个注解来检查结束日期必须大于开始日期。

class A {
    Date startDate;
    Date endDate;
}

class B {
    Date startDate;
    Date endDate;
}

根据我链接的答案,我需要编写2个单独的注释。如何使用单个注释来做到这一点?

【问题讨论】:

    标签: java spring validation annotations bean-validation


    【解决方案1】:

    您可以使用反射来获取字段值。

    1. 在您链接的示例中,您需要向 @AddressAnnotation 添加 2 个字段:
    • startDateFieldName
    • endDateFieldName
    1. 将它们存储在MultiCountryAddressValidator 中的initialize 方法中。
    2. implements ConstraintValidator<AddressAnnotation, Address> 更改为implements ConstraintValidator<AddressAnnotation, Object>
    3. isValid 方法中使用反射来获取开始和结束日期的实际值。

    【讨论】:

    • 感谢您的回答。这是最好和最干净的方式吗?我坚持的一点其实不是注解。我正在尝试使用最干净的方式。
    • @Bose 可能是的。或者为 A 和 B 类创建一些带有父日期字段的超类,这样您就可以在 Validator 中使用这个超类。在其他情况下,您无法确定要检查哪个类以及其中的字段将如何命名。
    猜你喜欢
    • 2020-08-03
    • 2017-03-14
    • 2016-05-18
    • 2020-02-17
    • 2021-10-22
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多