如果属性与通过@ConfigurationProperties映射到的Java bean匹配,那么有没有办法验证application.properties (或yml) -这样如果属性中有拼写错误,就会抛出异常?
我尝试使用@Validated,但只有当每个属性都有@NotNull注释时它才有效--但这并不是我想要实现的……配置中可能有一些可以为空的属性,我仍然希望“验证”它们
我刚刚花了2个小时调试一个问题,我发现问题是我拼错了一个属性名称,例如application.yml
property1: 1
properrrrrty2: 2@Configuration
@ConfigurationProperties
public class AppConfig {
private String property1;
private String property2; // <--- this property does not match due to typo in application.yml
}发布于 2021-04-29 19:56:28
A)
如果您希望确保某个属性始终存在,则对该属性使用带有@NotNull的@Validated。如果@NotNull找不到这处房产,它将会抱怨。您仍然可以将该属性保留为空值,如果这就是您对可空属性的意思,并且NotNull不会抱怨。
您不能说我希望它能够为空,但验证器也应该在该属性为空时发出警告。
所以总结一下。
@NotEmpty属性必须存在,并且值不能为空
@NotNull属性必须存在。它并不关心它是否存在空值。
这就是为什么我坚持让你使用NotNull来满足你的需求。
B)
此外,我还可以想出另一种方法来处理这个问题。
@Component
public class AppConfig {
@Value("${property1}")
private String property1;
@Value("${property2}")
private String property2;
}使用带有@Value的注入,如果属性文件中不存在完全相同名称的属性,spring将无法在应用程序启动时初始化单例AppConfig,因此会通知您该名称的属性不存在,应用程序将不会启动。
https://stackoverflow.com/questions/67316682
复制相似问题