小编典典

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

spring-boot

我的以下字段带有@Value,指定了默认值:

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

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

不过,我想进一步加强此int字段的最小值和最大值,因为它表示一个整数百分比,小于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吗?


阅读 306

收藏
2020-05-30

共1个答案

小编典典

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

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

因此,@Value您可能不想创建那些包含预期属性并使用与绑定的类,而不是与它们一起使用@ConfigurationProperties。(并且您可能想使用它@Range)。

@ConfigurationProperties(prefix="tolerance")
public ToleranceProperties {

    @Range(min=1, max=100)
    private int percentage = 25;

    // Here be a getter/setter
}

这结合在@Configuration类添加上@ EnableConfigurationProperties(ToleranceProperties.class),您可以在需要属性的任何地方使用它。(请参阅参考指南中的类型安全配置属性

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

2020-05-30