约束验证器也适用于单个字段和集合



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

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

public class Foo {
Status status;
}

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

样品:

@StatusCheck(Status.ACTIVE)
public Foo foo;

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

可以用一个验证器做到这一点吗?还是我应该做两个?谢谢建议。

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

@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();
}

如果您知道如何做到这一点,请随时添加您的答案:)

是的,您可以对FooList<Foo>使用相同的验证器。

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

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

另请参阅此答案 对于类似的问题。

您还需要增强@StatusCheck注释的定义 通过目标ElementType.TYPE_PARAMETER, 以便允许将该注释放在泛型类型参数上< >之间:

@Target(ElementType.FIELD, ElementType.TYPE_PARAMETER)
....
public @interface StatusCheck {
....
}

最新更新