我有一个与Yaml的Mapping list映射到Spring Boot中的对象列表中描述的问题类似的问题,除了我想从YAML中使用的对应键名中更改对象中至少一个字段的标识符。
例如:
YAML文件:
config:
gateways:
-
id: 'g0'
nbrInputs: 128
nbrOutputs: 128
-
id: 'g1'
nbrInputs: 128
nbrOutputs: 128
配置类别:
@Configuration
@ConfigurationProperties(prefix="config")
public class GatewayConfig
{
List<Gateway> gateways = new ArrayList<Gateway>();
// Getter/Setter for gateways
// ...
public static class Gateway
{
private String id;
@Value("${nbrInputs}")
private int numInputs;
@Value("${nbrOutputs}")
private int numOutputs;
// Getters and Setters
// ...
}
}
我希望@Value批注允许我注入相应的属性值,但这似乎不起作用(注入'id'字段似乎可以正常工作)。
有没有办法使用@Value(或任何其他注释)来做到这一点?
谢谢你。
编辑:请注意,我要确定是否可以在不更改任一名称的情况下强制YAML属性和内部POJO中的字段之间的对应关系。我可能要这样做有几个原因-例如,我可能无法控制YAML文件的格式,并且我想在POJO中使用比YAML文件的作者更具描述性的标识符名称。
正如Stephave Nicoll所提到的,@Value
注解与无关@ConfigurationProperties
。只是内部POJO中的名称字段与配置文件中的名称相同,这应该起作用:
@Configuration
@ConfigurationProperties(prefix="config")
@EnableConfigurationProperties
public class GatewayConfig
{
List<Gateway> gateways = new ArrayList<Gateway>();
// Getter/Setter for gateways
// ...
public static class Gateway
{
private String id;
private int nbrInputs;
private int nbrOutputs;
// Getters and Setters
// ...
}
}
对评论的反应:
使用普通的Spring / Spring Boot,我认为您不能映射具有不同名称的字段并将其加载到网关列表中。可以选择使用普通的@Value注释,但是您的网关计数需要硬编码:
@Component
public class Gateway0{
@Value("${config.gateways[0].id}")
private String id;
@Value("${config.gateways[0].nbrInputs}")
private int numInputs;
@Value("${config.gateways[0].nbrOutputs}")
private int numOutputs;
// Getters and Setters
// ...
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句