Spring boot 2.0.0.Relase
我有属性类:
@Configuration
@ConfigurationProperties(prefix="person")
public class PersonProperties {
private AddressProperties addressProperties;
public AddressProperties getAddressProperties() {
return addressProperties;
}
public void setAddressProperties(final AddressProperties addressProperties) {
this.addressProperties = addressProperties;
}
public static class AddressProperties {
private String line1;
public String getLine1() {
return line1;
}
public void setLine1(final String line1) {
this.line1 = line1;
}
}
}和application.yml
person:
address:
line1: line1OfAddress它没有正确绑定,因为我的AddressProperties对象是null。当一个类与yml属性AddressProperties -> Address同名时,它工作得很好。我尝试添加带有前缀address的Qualifier或ConfigurationProperties,但它不起作用。不幸的是,我在spring文档中找不到关于这个案例的有用信息。
如何为嵌套属性指定前缀?
发布于 2018-05-15 18:16:38
yaml / Property文件中定义的属性应与class中定义的变量匹配。将yaml文件更改为
person:
# addressProperties will also work here
address-properties:
line1: line1OfAddress或者将bean定义为
@Configuration
@ConfigurationProperties(prefix = "person")
public class PersonProperties {
// here variable name doesn't matter, it can be addressProperties as well
// setter / getter should match with properties in yaml
// i.e. getAddress() and setAddress()
private AddressProperties address;
public AddressProperties getAddress() {
return address;
}
public void setAddress(AddressProperties address) {
this.address = address;
}
}如果希望在address下获取所有属性,而不在单独的bean中定义它们,则可以将PersonProperties类定义为
@Configuration
@ConfigurationProperties(prefix = "person")
public class PersonProperties {
private Map<String, Object> address;
public Map<String, Object> getAddress() {
return address;
}
public void setAddress(Map<String, Object> address) {
this.address = address;
}
}这里的PersonProperties#address将包含{line1=line1OfAddress}
现在address下的所有属性都将位于Map中。
发布于 2018-11-27 22:59:18
您可以简单地取消这两个类的嵌套,允许每个类都有自己的前缀。第一类:
@Configuration
@ConfigurationProperties(prefix="person")
public class PersonProperties {
private AddressProperties addressProperties;
public AddressProperties getAddressProperties() {
return addressProperties;
}
public void setAddressProperties(final AddressProperties addressProperties) {
this.addressProperties = addressProperties;
}
}第二类:
@Configuration
@ConfigurationProperties(prefix="person.address")
public class PersonAddressProperties {
private String line1;
public String getLine1() {
return line1;
}
public void setLine1(final String line1) {
this.line1 = line1;
}
}编辑:正如注释中所指出的,如果一段代码需要同时引用这两组属性,则必须同时注入这两个类。
https://stackoverflow.com/questions/50345888
复制相似问题