可以在我的自定义 Java 类型上使用现有标准 Java 约束注释之一(`@Size`)吗?

问题描述 投票:0回答:1

是否可以在我的新 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;

  //..
}
java validation constraints bean-validation
1个回答
0
投票

由于您使用的是 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
处理器......它“不知道”非内置的约束,所以我怀疑它仍然会抱怨它。但您不一定需要处理器。

© www.soinside.com 2019 - 2024. All rights reserved.