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 楼答案
使用常规验证API注释的验证仅在某些情况下有效
因此,您可能希望创建一个包含预期属性的类,并使用与
@ConfigurationProperties
的绑定,而不是将@Value
用于这些属性。(您可能想改用@Range
)它结合在
@Configuration
类上添加@ EnableConfigurationProperties(ToleranceProperties.class)
,您可以在任何需要属性的地方使用它。(见参考指南中的typesafe configuration properties)注意:您也可以将其声明为
@Component