是否可以在我的新 Java 类型 (
@Size
) 上使用现有标准 Java 约束注释之一 (MyType
)?
我不希望我的框架的使用者必须使用非标准注释才能对新数据类型应用简单的大小约束。
我希望能够将
@Size
应用于 MyType
类型的字段,但我通过 hibernate-validator-annotation-processor
: 收到此错误
SampleDTO.java:3: error: The annotation @Size is disallowed for this data type.
@Size(max = 100)
^
有办法让它发挥作用吗?
到目前为止,我有一个 DTO 类,其中包含 1 个类型为
MyType
: 的字段
public class SampleDTO {
@Size(max = 100)
public MyType fileContent;
}
MyType
基本上包含一个 byte[]
(将对应于文件内容):
public class MyType {
private byte[] value;
//..
}
由于您使用的是 Hibernate Validator,因此您可以为您的类型创建
ConstraintValidator
接口的自定义实现:
public class MyClassSizeValidator implements ConstraintValidator<Size, MyType> {
@Override
public void initialize(Size constraintAnnotation) {
// ....
}
public boolean isValid(MyType value, ConstraintValidatorContext context) {
// ....
}
}
然后将此验证器的 FQCN 添加到
META-INF/services/jakarta.validation.ConstraintValidator
文件
com.acme.validation.validators.MyClassSizeValidator
这将解决将约束实际应用到您的班级的部分。至于
hibernate-validator-annotation-processor
处理器......它“不知道”非内置的约束,所以我怀疑它仍然会抱怨它。但您不一定需要处理器。