Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring启动验证:从属性文件获取最大大小_Java_Spring_Spring Boot - Fatal编程技术网

Java Spring启动验证:从属性文件获取最大大小

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),并且@

我有一个spring启动服务器,希望通过spring验证我的值。使用@Size验证,我可以设置最大大小。但我想从application.property文件中获取此最大大小

我已尝试通过“@value(…)”加载此值,但无法在“@Size”字段中使用此值

@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