Java Spring启动验证:从属性文件获取最大大小
我有一个spring启动服务器,希望通过spring验证我的值。使用@Size验证,我可以设置最大大小。但我想从application.property文件中获取此最大大小 我已尝试通过“@value(…)”加载此值,但无法在“@Size”字段中使用此值Java Spring启动验证:从属性文件获取最大大小,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个spring启动服务器,希望通过spring验证我的值。使用@Size验证,我可以设置最大大小。但我想从application.property文件中获取此最大大小 我已尝试通过“@value(…)”加载此值,但无法在“@Size”字段中使用此值 @Value(${max.size.in.properties}) 私有整数最大值; @尺寸(最大值=10) 私有字符串描述; 您可以像这篇文章一样根据java反射进行操作这是不可能的,因为注释需要常量表达式(static final),并且@
@Value(${max.size.in.properties})
私有整数最大值;
@尺寸(最大值=10)
私有字符串描述;
您可以像这篇文章一样根据java反射进行操作这是不可能的,因为注释需要常量表达式(static final
),并且@Value
不能用于将值注入静态final字段
也许这个项目可以帮助您:。
它允许您将Spring表达式语言与bean验证一起使用。我们可以通过编程指定约束,当使用
Spring boot starter web时,这些约束已经在类路径中可用
鉴于:
类MyObject{
私有字符串描述;
...
}
我们可以这样设置约束:
@Value("${max.size.in.properties}")
private int MAX_SIZE;
HibernateValidatorConfiguration configuration = Validation
.byProvider( HibernateValidator.class )
.configure();
ConstraintMapping constraintMapping = configuration.createConstraintMapping();
constraintMapping.type( MyObject.class )
.property( "description", FIELD )
.constraint( new SizeDef().min( 1 ).max( MAX_SIZE ) );
并使用以下命令验证对象的实例:
Validator Validator=configuration.addMapping(约束映射)
.buildValidatorFactory()
.getValidator();
设置约束条件=
validator.validate(myObjectInstance);
if(constraintViolations.size()>0){
…//处理约束冲突
}
坏消息:Java验证API的标准注释无法满足您的需要
好消息:您可以轻松创建一个完全符合您需要的自定义注释
您需要创建一个自定义验证注释(我们称之为@ConfigurableSize
),该注释将两个字符串作为参数,一个用于保存最小大小的属性名称,另一个用于保存最大大小的属性名称
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Repeatable(ConfigurableSize.List.class)
@Constraint(validatedBy = {ConfigurableSizeCharSequenceValidator.class})
public @interface ConfigurableSize {
String message() default "size is not valid";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
String minProperty() default "";
String maxProperty() default "";
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
@Retention(RUNTIME)
@Documented
@interface List {
ConfigurableSize[] value();
}
}
您可以在bean中应用自定义注释
public class SomeBean {
@ConfigurableSize(maxProperty = "max.size.in.properties")
private String description;
}
最后在应用程序.properties中定义属性
max.size.in.properties=10
就这样。您可以在这篇博文中找到更多详细信息和完整示例:
你能说得更具体一些,提供更多的细节吗?我认为这行不通。不会在每次调用时计算注释。
max.size.in.properties=10