有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Spring Boot应用程序中对@Value注释字段实施约束

我用@Value注释了以下字段,指定了默认值:

@Value("${tolerance.percentage:25}")
private int tolerance;

该代码正确地将字段值初始化为系统属性“tolerance.percentage”(如果该属性存在)。如果不存在,则默认为25

不过,我想更进一步,在这个int字段上强制使用min和max,因为它代表的百分比小于100,而墨菲定律意味着有人(可能是我)可能会在外部错误地配置属性,我的应用程序会在运行时开始做奇怪的事情,这对我来说太晚了。如果在应用程序启动时将属性设置为“101”或“-1”,我希望抛出一个错误。见鬼,如果我试图在@Value注释中将其默认为101,我甚至希望抛出一个错误,但这对于这个问题来说并不重要。以下是我尝试过的:

//@Min and @Max don't produce the intended behavior when combined with @Value
@Min(0)
@Max(100)
@Value("${tolerance.percentage:25}")
private int tolerance;

我可以在int知道的@Value字段上强制执行最小值和最大值吗


共 (1) 个答案

  1. # 1 楼答案

    使用常规验证API注释的验证仅在某些情况下有效

    1. 在类路径上有一个实现(“hibernate-validator”)
    2. 它们所在的类用于绑定externalized configuration

    因此,您可能希望创建一个包含预期属性的类,并使用与@ConfigurationProperties的绑定,而不是将@Value用于这些属性。(您可能想改用@Range

    @ConfigurationProperties(prefix="tolerance")
    public ToleranceProperties {
    
        @Range(min=1, max=100)
        private int percentage = 25; 
    
        // Here be a getter/setter
    }
    

    它结合在@Configuration类上添加@ EnableConfigurationProperties(ToleranceProperties.class),您可以在任何需要属性的地方使用它。(见参考指南中的typesafe configuration properties

    注意:您也可以将其声明为@Component