本文介绍了如何指定嵌套属性的默认值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我没有为 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; } }更多推荐
如何指定嵌套属性的默认值?
发布评论