Java 单场和集合的约束校验器
您能告诉我如何创建自定义约束验证器,该验证器也适用于单个字段和集合吗 例如,我有一个包含状态枚举的对象FooJava 单场和集合的约束校验器,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) 公开名单; 可
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,否则
中的验证注释将被忽略。