【问题标题】:Java @interface.List Groups not working within Custom constraint annotationsJava @interface.List 组在自定义约束注释中不起作用
【发布时间】:2018-02-21 23:38:50
【问题描述】:

我创建了一个自定义注解,其中 @Size.List 对不同的组具有不同的约束。

当使用 this 验证变量时,它使用两个约束而不是所选组的约束。

但是非分组注释正常工作 代码示例:

@Size.List({
    @Size(max = 1, groups = Group1.class),
    @Size(max = 2, groups = Group2.class) })�@OtherAnnotationsThatWork
public @interface FooAnnotation {

    String message() default “Bar”;
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default{};
}

public Class Bar{
    public Bar(String foo){ Foo = foo; }

    //doesn’t work
    @FooAnnotation
    private Foo;

    //getters and setters 
}

@Test
Private barTest(){
    Bar bar1 = new Bar(“a”);
    Validate(bar1, group1.class);

    Bar bar2 = new Bar(“bb”);
    //fails because size is greater than max of 1
    Validate(bar2, group2.class) 
}

我也知道这不是由@Size.List 或我的组设置不正确引起的,因为以下代码有效。

@OtherAnnotationsThatWork
public @interface FooAnnotation {

    String message() default “Bar”
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default{};
}

public Class Bar{
    public Bar(String foo){ Foo = foo; }

    @Size.List({
        @Size(max = 1, groups = Group1.class),
        @Size(max = 2, groups = Group2.class) })
    @FooAnnotation
    private Foo;

    //getters and setters 
}

@Test
Private barTest(){
    Bar bar1 = new Bar(“a”);
    Validate(bar1, group1.class);

    Bar bar2 = new Bar(“bb”);
    Validate(bar2, group2.class) //passes
}

所以问题是。如何使组在自定义注释中工作。

【问题讨论】:

    标签: java annotations constraints bean-validation hibernate-validator


    【解决方案1】:

    根据 Bean Validation 规范(section 3.3,约束组合),不考虑构成约束的组(例如您的示例中的 @Size 约束):

    主约束注解中的组由组合注解继承。组合注释上的任何组定义都将被忽略。

    即你的第二个例子是要走的路。

    此规则背后的基本原理是在约束定义本身不定义任何组成员身份(并且这些组合约束是约束定义的一部分)的意义上保持一致。

    【讨论】:

      猜你喜欢
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多