如何将 yaml 中的地图条目转换为 Spring 中的 属性?

How to convert map entry from yaml into property in Spring?

我的 application.yml 中有以下 属性 列表:

foo: 
  bar: 
    - 
      id: baz
      item: value
    // ...

然后我想使用 @DynamicPropertySource:

覆盖测试中的 item
    @DynamicPropertySource
    @JvmStatic
    @Suppress("unused")
    fun setupProperties(registry: DynamicPropertyRegistry) {
        registry.add("foo.bar[0].item") { "new value" }
    }

但是在测试期间,我将所有其他属性设置为空值,bar 数组中有一个元素。

我想我没有正确引用 yaml 文件中的地图条目。 我想知道我该怎么做?

原来Spring引导文档说的很清楚:

When lists are configured in more than one place, overriding works by replacing the entire list.

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-complex-type-merge

这实际上意味着我需要提供整个列表项:

@DynamicPropertySource
@JvmStatic
@Suppress("unused")
fun setupProperties(registry: DynamicPropertyRegistry) {
    registry.add("foo.bar[0].id") { "new baz" }
    registry.add("foo.bar[0].item") { "new value" }
    // ...
}