我想为自定义约束验证器添加 2 个值,因为我有 2 个功能标志:
@JsonProperty(value = "name")
@BlockedWithoutEnabledFeatureFlag(feature = FeatureFlag.AAA, values = {"aaa", "bbb"})
@BlockedWithoutEnabledFeatureFlag(feature = FeatureFlag.BBB, values = {"ccc", "ddd"})
private String parameter;
Run Code Online (Sandbox Code Playgroud)
在哪里:
@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 {};
}
Run Code Online (Sandbox Code Playgroud)
和实施:
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) {
Run Code Online (Sandbox Code Playgroud)
但现在我收到编译错误“重复注释”。怎么做?
你应该让你的BlockedWithoutEnabledFeatureFlag内容可重复。去做这个:
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatableBlockedWithoutEnabledFeatureFlag {
BlockedWithoutEnabledFeatureFlag[] value();
}
Run Code Online (Sandbox Code Playgroud)
...
@Repeatable(RepeatableBlockedWithoutEnabledFeatureFlag.class)
public @interface BlockedWithoutEnabledFeatureFlag {
...
Run Code Online (Sandbox Code Playgroud)
那么您应该能够添加多个@BlockedWithoutEnabledFeatureFlag注释。
| 归档时间: |
|
| 查看次数: |
271 次 |
| 最近记录: |