我知道在SpringBoot 2.2中,我可以很容易地通过以下结构注入一个属性文件。
@ConstructorBinding
@ConfigurationProperties(prefix = "example")
@Data
@AllArgsConstructor
public final class MyProps {
@NonNull
private final String neededProperty;
@NonNull
private final List<SampleProps> lstNeededProperty;
public String getFirstSample(){
return lstNeededProperty.get(0); //throws NPE
}
}
@ConstructorBinding
@AllArgsConstructor
@Data
public class SampleProps {
String key;
String label;
}
和yml文件一样。
expample:
neededProperty: test1
lstNeededProperty:
-key: abc
label: input
该 @NonNull
蛮好用的 String
但失败的 List
– 因为即使列表将被设置,NPE也会被抛出。
是否有一个 简单的 的方式来检查是否 List
是初始化的?我试过 @Postconstruct
但是这个根本就没有被调用。
解决方案:
试着检查列表的大小和初始化。
@ConstructorBinding
@ConfigurationProperties(prefix = "example")
public final class MyProps {
@NonNull
private final String neededProperty;
@Size(min=1)
private final List<String> lstNeededProperty = new ArrayList<>();
}