将属性从application.yml注入到地图

时间:2018-08-29 21:55:37

标签: spring-boot yaml configurationproperties

我的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控制器中,并将此配置绑定到get configs端点/ controller / config

调用此端点时,期望返回

{
      "lists": {
         "exampleList": ["1", "2", "3"],
         "exampleString": "abcde"
         "another": {
            "example1": "exam1",
            "example2": "exam2"
         }
      }

   }

相反,它返回如下所示的响应

{
          "lists": {
             "exampleList": {
                 "0" : "1",
                 "1" : "2",
                 "2" : "3"
             }
             "exampleString": "abcde"
             "another": {
                "example1": "exam1",
                "example2": "exam2"
             }
          }

       }

yml中的列表被映射到Map中的对象。如何实现对各个数据类型的正确绑定?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

有更复杂的解决方案可用。除了将所有配置注入Map之外,您还可以使用一个简单的Java DTO来表示配置的结构。

已使用@ConfigurationProperties将配置注入Java DTO,并从控制器端点返回JavaDTO。

请参阅https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties


Spring Boot执行器端点还具有一个称为configprops的特定端点,该端点提供了所有配置属性。 但是,如果要使用它,则可能需要进行很多自定义。 有关更多信息,https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html