首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证ConfigurationProperties映射

验证ConfigurationProperties映射
EN

Stack Overflow用户
提问于 2021-04-29 19:42:00
回答 1查看 40关注 0票数 0

如果属性与通过@ConfigurationProperties映射到的Java bean匹配,那么有没有办法验证application.properties (或yml) -这样如果属性中有拼写错误,就会抛出异常?

我尝试使用@Validated,但只有当每个属性都有@NotNull注释时它才有效--但这并不是我想要实现的……配置中可能有一些可以为空的属性,我仍然希望“验证”它们

我刚刚花了2个小时调试一个问题,我发现问题是我拼错了一个属性名称,例如application.yml

代码语言:javascript
复制
 property1: 1
 properrrrrty2: 2
代码语言:javascript
复制
@Configuration
@ConfigurationProperties
public class AppConfig {
    private String property1;     
    private String property2; // <--- this property does not match due to typo in application.yml
}
EN

回答 1

Stack Overflow用户

发布于 2021-04-29 19:56:28

A)

如果您希望确保某个属性始终存在,则对该属性使用带有@NotNull@Validated。如果@NotNull找不到这处房产,它将会抱怨。您仍然可以将该属性保留为空值,如果这就是您对可空属性的意思,并且NotNull不会抱怨。

您不能说我希望它能够为空,但验证器也应该在该属性为空时发出警告。

所以总结一下。

@NotEmpty属性必须存在,并且值不能为空

@NotNull属性必须存在。它并不关心它是否存在空值。

这就是为什么我坚持让你使用NotNull来满足你的需求。

B)

此外,我还可以想出另一种方法来处理这个问题。

代码语言:javascript
复制
@Component
public class AppConfig {

    @Value("${property1}")
    private String property1;

    @Value("${property2}")     
    private String property2; 
}

使用带有@Value的注入,如果属性文件中不存在完全相同名称的属性,spring将无法在应用程序启动时初始化单例AppConfig,因此会通知您该名称的属性不存在,应用程序将不会启动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67316682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档