如何指定嵌套属性的默认值? [英] How to specify the default value for nested property?

查看:38
本文介绍了如何指定嵌套属性的默认值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我没有为 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆