【问题标题】:Validate @Value-annotated fields during application startup [duplicate]在应用程序启动期间验证 @Value 注释的字段[重复]
【发布时间】:2017-11-07 15:42:41
【问题描述】:

如何在应用程序启动期间检查属性文件中的值是否符合我的预期?直接注释字段不起作用。 我正在使用 spring boot 1.5.3.RELEASE,spring 4.3.8.RELEASE

服务:

@Service
@Validated
public class ConfigService {
    @URL
    @Value("${checkout.url}")
    private String checkoutUrl;
    @Size(max = 26)
    @Value("${checkout.payment-method}")
    private String paymentMethod;
}

属性文件(application.properties):

checkout.url=not-a-url-at-all
checkout.payment-method=CreditCardButMuchTooLongToQualifyForSizeValidator

【问题讨论】:

  • 作为一个选项,您可以注释这些字段的设置器(而不是直接注释字段)并在这些设置器中进行所有验证。然后,如果验证失败,您可以抛出错误。
  • @RomanProshin:在设置器上设置验证不起作用,我遇到了一个异常:交叉参数约束 X 没有交叉参数验证器。方法的验证是在返回值上执行的,对于 settter 来说是 'void'
  • 验证仅适用于 @ConfigurationProperties 注释类并结合使用 @EnableConfigurationProperties
  • 嗨,@M.Deinum,这听起来像是正在发生的事情,但是如果这不是太麻烦的话,您能否在答案中添加解释为什么会这样?谢谢。

标签: java spring validation hibernate-validator


【解决方案1】:

您可以在您的类中使用这种 getter 方法样式来验证字符串长度:

@Size(min = Number, max = Number)
public String getField() {
    return field;
}

对于验证数字:

@Max(Number) or @Min(Number) 

当 Number 等于 int 值时

如果字段没有这个限制,它会抛出一个java.lang.IllegalStateException

如果没有,不要忘记将此依赖项添加到您的 pom 中:

<dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>el-impl</artifactId>
    <version>2.2</version>
</dependency>

【讨论】:

  • 在初始化 Spring Context 时,在 Bean 构造期间不会调用 Getter。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-08-12
  • 2011-09-12
  • 1970-01-01
  • 2011-06-07
相关资源
最近更新 更多