当我没有指定值时,以下代码会抛出 NPEacme.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();
}
}
使 Spring Boot 实例化的正确方法是什么Security
具有默认值的对象roles
价值?我应该使用@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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)