Java 如何指定嵌套属性的默认值?
当我没有为Java 如何指定嵌套属性的默认值?,java,spring-boot,Java,Spring Boot,当我没有为acme.security.roles指定值时,以下代码将抛出NPE: @ConstructorBinding @ConfigurationProperties("acme") public class AcmeProperties { private final Security security; public AcmeProperties(Security security) { this.security = security; }
acme.security.roles
指定值时,以下代码将抛出NPE:
@ConstructorBinding
@ConfigurationProperties("acme")
public class AcmeProperties {
private final Security security;
public AcmeProperties(Security security) {
this.security = security;
}
public Security getSecurity() {
return security;
}
public static class Security {
private final List<String> roles;
public Security(@DefaultValue("USER") List<String> roles) {
this.roles = roles;
}
public List<String> getRoles() {
return roles;
}
}
}
使用默认的
角色
值使spring boot实例化安全性
对象的正确方法是什么?我是否应该使用@DefaultValue
和SPEL以某种方式使其工作?试试这个。这应该行得通
@Configuration
@ConfigurationProperties(prefix = "acme")
public class AcmeProperties {
private Security security;
public Security getSecurity() {
return security;
}
public void setSecurity(Security security) {
this.security = security;
}
@PostConstruct
public void initDefaultValues() {
if(security == null) {
security = new Security();
}
}
}
安全类将如下所示
public class Security {
private List<String> roles = Lists.newArrayList("USER");
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
}
公共类安全{
私有列表角色=Lists.newArrayList(“用户”);
公共列表getRoles(){
返回角色;
}
public void setRoles(列出角色){
this.roles=角色;
}
}
为什么不这样做呢私有列表角色=Lists.newArrayList(“用户”)
。如果在属性文件中找不到任何内容,它将默认为该值。在这种情况下,我将不得不使用@DefaultValue(“用户”)
使spring boot为角色生成具有默认值的spring-configuration-metadata.json,谢谢。我知道使用可变类可以达到预期效果。但如何用不变的方法实现同样的效果呢?
public class Security {
private List<String> roles = Lists.newArrayList("USER");
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
}