如何指定嵌套属性的默认值? [英] How to specify the default value for nested property?
本文介绍了如何指定嵌套属性的默认值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我没有为 acme.security.roles
指定值时,以下代码抛出 NPE:
The following code throws NPE when I don't specify value for acme.security.roles
:
@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;
}
}
}
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(AcmeProperties.class)
public class MyConfiguration {
@Bean HttpClientConnectionManager httpClientConnectionManager(AcmeProperties acmeProperties) {
Security security = acmeProperties.getSecurity();
security.getRoles(); // throws NPE
return new PoolingHttpClientConnectionManager();
}
}
使用默认 roles
值使 Spring Boot 实例化 Security
对象的正确方法是什么?我应该以某种方式使用 @DefaultValue
和 SPEL 使其工作吗?
What is the correct way to make spring boot instantiate Security
object with default roles
value? Should I use @DefaultValue
and SPEL somehow to make it work?
推荐答案
试试这个.这应该有效.
Try this. This should work.
@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;
}
}
这篇关于如何指定嵌套属性的默认值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文