gpt4 book ai didi

Java @interface.List 组在自定义约束注释中不起作用

转载 作者:行者123 更新时间:2023-11-30 02:14:51 25 4
gpt4 key购买 nike

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

使用此方法验证变量时,它会使用这两个约束,而不是所选组的约束。

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

@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
}

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

最佳答案

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

Groups from the main constraint annotation are inherited by the composing annotations. Any groups definition on a composing annotation is ignored.

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

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

关于Java @interface.List 组在自定义约束注释中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48917318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com