【问题标题】:Is it possible to overload javax validation annotations to read in multiple data types?是否可以重载 javax 验证注释以读取多种数据类型?
【发布时间】:2014-07-24 22:30:43
【问题描述】:

我正在使用来自javax.validator 的自定义验证; @Min,@Max。我已经做了自定义注释。有没有办法为多种数据类型使用一个注解?

如果我的注释大致是:

    @Target( { METHOD, FIELD, ANNOTATION_TYPE })
    @Retention(RUNTIME)
    @Constraint(validatedBy = CustomValidator.class)
    @Documented
    public @interface CustomAnnotation{ /* Annotation code */ }

我的验证器大致是:

    public class CustomValidator implements ConstraintValidator<CustomAnnotation, int> {

        @Override
        public void initialize(CustomAnnoation constraintAnnotation) { /* Init Code */ }

        @Override
        public boolean isValid(int object, ConstraintValidatorContext constraintContext) { /* isValid Code */ }
    }

这将使注释只接受 int 输入。我怎么能重载注释也接受,比如双打?

【问题讨论】:

    标签: java validation annotations


    【解决方案1】:

    您使用 isValid(..) 方法创建了类,它与注释没有任何关系。 我了解,您想创建注释作为发现验证器类的地方,如果是,只需用不同类型重载 isValid(..) 方法即可。

    【讨论】:

    • 这个我已经试过了,还是不行。该工具引入 并且该 Datatype 是 isValid 所需要的。如果我尝试切换 isValid 以提取 double 而不是 int,则会出错说 CustomValidator 不是抽象的并且需要并覆盖 isValid 方法。
    • 但是您是如何设法使其首先与 一起工作的呢? Java 参数化类型不允许使用原语。我不知道你想在那里验证什么,但你可以例如做 并在 isValid(..) 方法调用 object.doubleValue().
    • 抱歉,在我的代码中我实际上使用的是整数而不是整数。我将尝试使用 Number 而不是 Integer 或 Double。我希望这也适用于数组,例如私有 Integer[] IntegerArray。如果你的方法有效,我还需要一个单独的数组注释/验证器吗?
    • 但是这里最重要的是考虑方法逻辑。将这些类型(数字和数组)的验证放在一起是否有意义?您始终可以使用 Number[] 或 Double[] 作为您的类型参数,并为单个数字创建一个具有单个元素的数组:new Integer[] {1};
    • 这确实有意义,因为他们正在验证同一件事。一个数组只会一次验证多个。我不能只制作一个数组验证器,然后制作我所有的变量数组。正在为我无法更改任何变量的预制表单创建验证器。
    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多