我有一个spring组件,用于验证实体类的值,
其中一个变量有一个自定义注释,其值应该从属性文件加载,目前它表示Attribute must be constant
以下是示例代码。
我知道Spring允许获取这样的属性
@Value("${allowedNames}")
private String names;
但我有一个实体,其中一个变量由自定义验证器接口注释,即@NameValidationDefinition
。我想将属性文件中的值传递给注释,但它给出了编译时错误,即属性必须是常量,据我所知,我知道
Annotations take only constants or final and static declared primitives or Strings
public Class Person {
@NameValidationDefinition(values = names)
private String name;
}
我想知道的是,是否有一种解决方法可以使其工作?
默认情况下,属性文件中的值被转换为String,但是当我创建实体并将变量初始化为static final并在构造函数中传递String时,我得到相同的编译时错误。
我很感激对此有任何帮助。
答案 0 :(得分:0)
注释中不能包含变量。这不是Bean Validation的限制,而是JVM本身的限制。另请参阅Which types can be used for Java annotation members?
注意,在Spring示例中,您给出的值是一个带有特殊"键的字符串" $ {allowedNames} 稍后进行插值。这与注释的值不同,正如您的代码所暗示的那样是实际变量。