我想为我的自定义约束验证器添加两个值,因为我有两个功能标志:

 @JsonProperty(value = "name")
    @BlockedWithoutEnabledFeatureFlag(feature = FeatureFlag.AAA, values = {"aaa", "bbb"})
    @BlockedWithoutEnabledFeatureFlag(feature = FeatureFlag.BBB, values = {"ccc", "ddd"})
    private String parameter;

其中:

@Constraint(validatedBy = {BlockedWithoutEnabledFeatureFlagValidator.class})
@Target({FIELD, PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@ReportAsSingleViolation
public @interface BlockedWithoutEnabledFeatureFlag {

    String message() default "{validation.constraints.BlockedWithoutEnabledFeatureFlag.message}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    FeatureFlag feature();

    String[] values() default {};
}

和实施:

public class BlockedWithoutEnabledFeatureFlagValidator implements ConstraintValidator<BlockedWithoutEnabledFeatureFlag, Object> {
    private final FeatureFlagService featureFlagService;

    private List<String> blocked;
    private FeatureFlag feature;

    @Override
    public void initialize(BlockedWithoutEnabledFeatureFlag constraintAnnotation) {
        blocked = Arrays.asList(constraintAnnotation.values());
        feature = constraintAnnotation.feature();
    }

@Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {

但是现在我得到了编译错误"重复注释".如何做到这一点?

推荐答案

你应该让你的BlockedWithoutEnabledFeatureFlag可重复.要做到这一点:

  1. 创建新的"顶层"批注:
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatableBlockedWithoutEnabledFeatureFlag {
    BlockedWithoutEnabledFeatureFlag[] value();
}
  1. 将@Repeatable添加到BLockedWithoutEnabledFeatureFlag批注
...
@Repeatable(RepeatableBlockedWithoutEnabledFeatureFlag.class)
public @interface BlockedWithoutEnabledFeatureFlag {
...

那么您应该能够添加一个以上的@BlockedWithoutEnabledFeatureFlag个批注.

Java相关问答推荐

如何在带有Micronaut的YAML中使用包含特殊字符的字符串作为键

JVM会优化这个数学运算吗?

Java中如何根据Font.canDisplay方法对字符串进行分段

对于几乎不涉及逻辑的请求,您是否应该使用命令模式?

计算两个浮点数之间的距离是否对称?

如何读取3个CSV文件并在控制台中按顺序显示?(Java)

根本不显示JavaFX阿拉伯字母

try 在两个不同数组的数字之间求平均值

Java中HashSet的搜索时间与TreeSet的搜索时间

我的代码是线程安全的吗?[Java、CAS、转账]

为什么mvn编译生命周期阶段不只是编译已更改的java文件?

如何使用Java对随机生成的字母数字优惠券代码进行过期设置

无法在Java中获取ElastiCache的AWS CloudWatch指标

Java递归泛型是否可以被视为继承和重写的语法糖

java.lang.NoSuchMethodError:';org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream$Builder org.apache.poi-poi-ooxml-5.2.4

java.lang.ClassCastException:com.google.firebase.FirebaseException无法转换为com.google.fire base.auth.FirebaseAuthException

OpenJDK20:JEP434:Foreign Function&;内存API(第二次预览)

错误:JOIN/ON的参数必须是boolean类型,而不是bigint类型.Java Spring启动应用程序

如何解释泛型类层次 struct 中子类的返回值类型和参数定义?

Hibernate 6 + 类的属性持久化为字符串