【发布时间】:2016-07-13 22:18:32
【问题描述】:
我有一个类似于Mapping list in Yaml to list of objects in 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 文件作者使用的更具描述性的标识符名称。
【问题讨论】:
-
您根本不需要
@Value。自动考虑嵌套对象。删除@Value并为 num**** 添加 getter/setter -
感谢您的快速回复,Nicoll 先生。我已经有了 numInputs 和 numOutputs 的 getter 和 setter。我无法弄清楚的是如何使 YAML 文件中的“nbrInputs”的值注入对象中的“numInputs”(以及“nbrOutputs”注入“numOutputs”)。当然,我可以将 Gateway 类中的字段更改为“nbrInputs”和“nbrOutputs”,但我想知道是否可以不这样做就使其工作。谢谢。
-
不,你不能那样做。
@ConfigurationProperties的主要目的是将环境绑定到对象模型,没有“中间转换”。话虽如此,没有人会阻止您自己创建此类对象并将其转换为“真实”类型。
标签: java spring spring-boot configuration yaml