Java 单场和集合的约束校验器

Java 单场和集合的约束校验器,java,spring,bean-validation,Java,Spring,Bean Validation,您能告诉我如何创建自定义约束验证器,该验证器也适用于单个字段和集合吗 例如,我有一个包含状态枚举的对象Foo public class Foo { Status status; } 状态可以是活动或禁用。我想确保当我对Foo或Collection类型的某些字段使用注释约束时,约束检查字段是否已将状态设置为所需的值 样本: @StatusCheck(Status.ACTIVE) public Foo foo; 或 @StatusCheck(Status.ACTIVE) 公开名单; 可

您能告诉我如何创建自定义约束验证器,该验证器也适用于单个字段和集合吗

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

public class Foo {
    Status status;
}
状态可以是
活动
禁用
。我想确保当我对Foo或Collection类型的某些字段使用注释约束时,约束检查字段是否已将状态设置为所需的值

样本:

@StatusCheck(Status.ACTIVE)
public Foo foo;

@StatusCheck(Status.ACTIVE)
公开名单;

可以用一个验证器来实现吗?还是我应该做两个?谢谢您的建议。

是的,您可以对
Foo
列表使用相同的验证器

为此,您需要升级到6.0.x和2.0.1。 然后,您可以像这样验证列表元素:

public List<@StatusCheck(Status.ACTIVE) Foo> foos;
@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();
}

我使用注释中定义的多个验证器类来解决它,如下所示:

public List<@StatusCheck(Status.ACTIVE) Foo> foos;
@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();
}
@已记录
@目标({ElementType.METHOD,ElementType.FIELD,ElementType.ANNOTATION_TYPE})
@保留(RetentionPolicy.RUNTIME)
@约束(validatedBy={StatusCheckValidator.class,StatusCheckValidatorList.class})
公共@接口状态检查{
字符串消息()默认为“foo.message”;
类[]组()默认值{};

类谢谢您的回答。我检查了hibernate validator的版本,它是5.3.x。这是一个大型项目,我现在无法升级依赖项。我们的版本可以这样做吗?@DenisStephanov不,不可能。您需要更新的hibernate validator,否则
中的验证注释将被忽略。