当前位置: 首页 > 知识库问答 >
问题:

从应用程序注入属性。yml到地图

阎祖鹤
2023-03-14

我有不同属性的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-configsendpoint/控制器/配置

调用此endpoint时,期望返回

{
      "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个答案

汲永嘉
2023-03-14

有一个更复杂的解决方案可用。您可以使用一个简单的Java DTO来表示配置的结构,而不是将所有配置注入映射。

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

提到https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-具有外部配置类型安全配置属性

Spring boot actuatorendpoint还有一个名为configprops的特定endpoint,它提供了所有配置属性。然而,如果你想使用它,你可能需要进行大量的定制。有关详细信息https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html

 类似资料:
  • 我知道我可以使用以下语法从属性文件中注入值: 然而,如果配置在YAML文件中,我猜不出如何实现同样的功能。 提前谢谢,

  • 我做错了什么?我正在使用这个小型独立应用程序,它运行并查找我的。相同的配置在JUnit中不起作用,请参阅下面: 以下不起作用,中的相同属性未加载并且只有值:

  • 我有一段扫描Spring上下文的代码: 我需要从文件,所以在类中,我有: (我从这里复制了YamlProperty tyLoaderFactory类) 是一个典型的Spring Boot文件,其中包含一些配置文件属性和默认配置文件: 在某些bean中,我使用读取属性。 当我运行我的应用程序,我传递变量,但我得到一个错误: 无法解析值“${file}”中的占位符“file” (由于applicati

  • 我在下有一个测试属性文件。但是我无法在我的单元测试中获取要加载的值。我有以下类: 在生产代码中,加载来自src/main/resources/application的值。yml。 单元测试等级: 我试图为每个应用程序添加一个测试配置文件。yml文件,看看添加ActiveProfiles(“test”)是否有效,但没有。 src/main/resources/application。yml公司 我还

  • 我是springboot的新手,我正在尝试从application.properties文件的位置(src/main/resources)读取属性值。但它总是返回NULL。我也需要帮助。附加类和属性文件。请注意:我试过“https://www.baeldung.com/properties-with-spring”如何访问Spring Boot中application.properties文件中定