对 Spring 引导应用程序中@Value注释字段强制实施约束



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

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

该代码将字段的值正确初始化为系统属性"tolerance.percent"(如果该 prop 存在(。 如果不存在,则默认为 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;

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

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

  1. 您在类路径上有一个实现("休眠验证程序"(
  2. 它们所在的类用于绑定外部化配置

因此,您可能希望创建一个包含预期属性的类,并使用与@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),你可以在任何需要属性的地方使用它。(请参阅参考指南中的类型安全配置属性。

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

最新更新