Как указать значение по умолчанию для вложенного свойства? - PullRequest
2 голосов
/ 30 марта 2020

Следующий код выдает NPE, когда я не указываю значение для 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();
    }
}

Как правильно создать экземпляр пружинной загрузки Security объект со значением по умолчанию roles ценность? Должен ли я использовать @DefaultValue и SPEL как-нибудь, чтобы он работал?

1 Ответ

0 голосов
/ 30 марта 2020

Попробуйте это. Это должно работать.

@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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...