1

我的 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 中的对象。我们如何才能实现对各自数据类型的正确绑定?

感谢你的帮助!

4

1 回答 1

0

有一个更复杂的解决方案可用。Map您可以拥有一个简单的 Java DTO,它代表您的配置结构,而不是将所有配置注入到 a中。

将您的配置注入 Java DTO@ConfigurationProperties并从您的控制器端点返回 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

于 2018-08-30T00:39:35.273 回答