将 application.yml 中的属性注入地图
Injecting properties from application.yml to a map
我的 application.yml 具有如下所示的不同属性。
lists:
exampleList: [1,2,3]
exampleString: abcde
another:
example1: exam1
example2: exam2
我正在使用 @ConfigurationProperties
将这些属性绑定到 Spring 组件
@Data
@Component
@ConfigurationProperties
public class ExampleConfig {
private Map<String,Object> lists;
}
我将在 spring-boot 控制器中注入此组件并将此配置绑定到获取配置端点 /controller/config
调用此端点时,预期是 return
{
"lists": {
"exampleList": ["1", "2", "3"],
"exampleString": "abcde"
"another": {
"example1": "exam1",
"example2": "exam2"
}
}
}
而是 return 如下所示的响应
{
"lists": {
"exampleList": {
"0" : "1",
"1" : "2",
"2" : "3"
}
"exampleString": "abcde"
"another": {
"example1": "exam1",
"example2": "exam2"
}
}
}
正在将 yml 中的列表映射到 Map 中的对象。我们如何才能实现对各个数据类型的正确绑定?
感谢您的帮助!
有更复杂的解决方案可用。您可以使用一个简单的 Java DTO 来代表您的配置结构,而不是将所有配置注入 Map
。
使用 @ConfigurationProperties
和 return JavaDTO 从您的控制器端点将您的配置注入 Java DTO。
Spring 引导执行器端点也有一个名为 configprops
的特定端点,它提供所有配置属性。
但是,如果您想使用它,您可能需要进行大量定制。
欲了解更多信息 https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
我的 application.yml 具有如下所示的不同属性。
lists:
exampleList: [1,2,3]
exampleString: abcde
another:
example1: exam1
example2: exam2
我正在使用 @ConfigurationProperties
将这些属性绑定到 Spring 组件@Data
@Component
@ConfigurationProperties
public class ExampleConfig {
private Map<String,Object> lists;
}
我将在 spring-boot 控制器中注入此组件并将此配置绑定到获取配置端点 /controller/config
调用此端点时,预期是 return
{
"lists": {
"exampleList": ["1", "2", "3"],
"exampleString": "abcde"
"another": {
"example1": "exam1",
"example2": "exam2"
}
}
}
而是 return 如下所示的响应
{
"lists": {
"exampleList": {
"0" : "1",
"1" : "2",
"2" : "3"
}
"exampleString": "abcde"
"another": {
"example1": "exam1",
"example2": "exam2"
}
}
}
正在将 yml 中的列表映射到 Map 中的对象。我们如何才能实现对各个数据类型的正确绑定?
感谢您的帮助!
有更复杂的解决方案可用。您可以使用一个简单的 Java DTO 来代表您的配置结构,而不是将所有配置注入 Map
。
使用 @ConfigurationProperties
和 return JavaDTO 从您的控制器端点将您的配置注入 Java DTO。
Spring 引导执行器端点也有一个名为 configprops
的特定端点,它提供所有配置属性。
但是,如果您想使用它,您可能需要进行大量定制。
欲了解更多信息 https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html