【发布时间】:2017-10-15 21:23:37
【问题描述】:
我有以下字段用@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;
我可以对@Value 知道的int 字段强制执行最小值和最大值吗?
【问题讨论】:
-
@Value在启动时注入值(对于单例,不确定您是否拥有prototype的 bean);我认为您当时不会(自动)触发 bean 验证... -
您只会在
@ConfigurationProperties类中获得验证,而不是在常规类中。如果要验证这些值,请添加@PostConstruct方法来检查范围。或者将其注入构造函数并在那里进行验证。 -
@M.Deinum 将
@ConfigurationProperties添加到我的pojo 工作。添加后,注释开始像我想的那样协同工作。如果您将您的评论正式化为答案,我会接受。
标签: java spring spring-boot