当前位置: 首页 > 知识库问答 >
问题:

在Spring启动应用程序中对@Value注释字段强制执行约束

鲁滨海
2023-03-14

我有以下字段注释@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字段强制执行最小值和最大值吗?

共有1个答案

和嘉澍
2023-03-14

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

  1. 在类路径上有一个实现('hibernet-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类add@EnableConfigurationProperties(roperties.class)上,您可以在任何需要属性的地方使用它。(请参阅参考指南中的类型安全配置属性。

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

 类似资料:
  • 问题内容: 我的以下字段带有,指定了默认值: 如果该属性存在,该代码将字段的值正确初始化为系统属性“ tolerance.percentage”。如果不存在,则默认为25。 不过,我想进一步加强此int字段的最小值和最大值,因为它表示一个整数百分比小于100,而且墨菲定律意味着某人(可能是我)可以从外部对属性进行配置,而我应用程序将在运行时开始做奇怪的事情,这对于我来说太晚了。如果在应用程序启动时

  • 问题内容: 我们的REST API接收一些JSON对象输入,其中某些字段必须不为null。这些可以是String / Integer,甚至可以是其他一些类实例作为参考。 我们正在尝试寻找一种方法来强制这些字段不为null,而不是在API中进行null检查的正确方法。当前: 我们想要的是这样的: 我们尝试了3件事: 1)升级到杰克逊2.0.6并使用注释com.fasterxml.jackson.an

  • 问题内容: 我使用JSP构建Web应用程序,并且在我的servlet中,我具有: 到现在为止,当JSP页面调用like时,我的serlvet都被调用了。我想要的是每当应用程序启动时也要执行的servlet。我可以在第一页上有一个类似“ START”的按钮,并在那里调用servlet。但是,我可以避免这种情况吗? 问题答案: 无论您想在启动时做什么,都应该由实现的类完成,因此您应该编写这样的类,例如

  • 我有一个使用Spring Boot Actuator的Java后端,但它不会在DigitalOcean Ubuntu VPS上启动。同样的应用程序在我的苹果电脑和其他Ubuntu电脑上运行良好。 它开始初始化,但每次都在同一点停止(没有例外,只是挂起)。如果我尝试在此时用停止它,它将无法恢复shell。 这是Outoput: 这是之后的输出: 有人面临过同样的问题吗?你们能帮帮我吗? 这里你有线程

  • 问题: count属性是必需的&前缀是必需的。如果您看到beanClass2,我将通过构造函数设置属性,在beanClass3中也是如此 但是当我执行代码时,它抛出异常。让我困惑的重要事情是: 2014年12月9日8:47:33 PM org.springframework.beans.factory.support.defaultsingletonbeanregistry destroySing

  • 问题内容: 使用Spring MVC在应用程序启动时执行Java类的最佳方法是什么? 问题答案: 不一定有“最佳”方式。和往常一样,有很多方法可以做到,“最佳”是最适合你的项目的: 如cjstehno所述,在XML中的bean元素上使用init-method =“ …” 实现Spring的接口。当部署在中时,在创建bean时将调用方法。 使用在bean上注释方法。同样,如果部署到,则在创建bean