当我没有为 acme.security.roles
指定值时,以下代码会抛出 NPE:
@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 使用默认 roles
值实例化 Security
对象的正确方法是什么?我是否应该使用 @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;
}
}
https://stackoverflow.com/questions/60935878/
相关文章:
visual-studio - phpcs — Wordpress 编码标准在 Visual Stu
angular - 如何使用 angular 在 s3 中使用带有多个文件的预签名 url
spring-boot - 由于 Content-Security-Policy,Swagger U
python - tf.data 与 tf.keras.preprocessing.image.Im
encryption - 为什么使用 JSON Web Tokens (JWT) 而不是普通加密
c# - TransactionScope 抛出异常 "This platform does not