java - ConstraintValidator 也适用于单个字段和集合

标签 java spring bean-validation

您能告诉我如何创建也适用于单个字段和集合的自定义约束 validator 吗?

例如,我有一个对象 Foo,其中包含状态枚举

public class Foo {
    Status status;
}

状态可以是 Activity 类型或禁用类型。我想确保当我对 Foo 或 Collection 类型的某些字段使用注释约束时,约束检查一个或多个字段是否已将状态设置为所需的值。

样本:

@StatusCheck(Status.ACTIVE)
public Foo foo;

@StatusCheck(Status.ACTIVE)
public List<Foo> foo;

可以使用单个 validator 来做到这一点吗?或者我应该做两个?谢谢建议。

最佳答案

我使用注释中定义的多个 validator 类来解决这个问题,如下所示:

@Documented
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { StatusCheckValidator.class, StatusCheckValidatorList.class })
public @interface StatusCheck {

    String message() default "foo.message";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
    Status value();
}

如果您知道更好的方法,请随时添加您的答案:)

关于java - ConstraintValidator 也适用于单个字段和集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51981423/

相关文章:

java - 以编程方式将新类添加到项目中

java - 在Java中,有没有办法在方法中设置一行以在该方法后面的任何点返回?

java - 效率: UUID vs int comparison in Java

java - 如何在 Spring boot Messaging 上添加 MessageConverter

java - Spring boot - 使用其他项目中定义的实现

java - 如何使用 ssh 和 key 授权 CRaSH

java - 如何在 xgettext 的 bean 验证注释中标记字符串消息?

java - 委托(delegate)(通用)约束定义注释

java - 按列名获取数据 apache poi excel

jakarta-ee - Glassfish 4.0 中的 Bean-Validation 1.1 - CDI 注入(inject)未按预期工作