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

Spring Boot yaml嵌套属性映射到配置类HashMap

於乐
2023-03-14

我有一个名为CommonConfig的配置类,到目前为止它工作得很好…

@Data
@Component
@ConfigurationProperties(prefix = “my")
public class CommonConfig {
  private String foo;
  private String bar;
  private SubA subA;

  @Data 
  public static class SubA {
    private String baz;
    private SubB subB;

    @Data 
    public static class SubB {
      private String qux;
    }
  }
}

以及与之配套的Yaml属性文件

my.foo: a
my.bar: b
my.sub-a.baz: c
my.sub-a.sub-b.qux: d

我的问题开始于当我想把一个映射到子B中时:

my:
  foo: a
  bar: b
  sub-a:
    baz: c
    sub-b:
      qux: d
      map:
        number-one: 1
        number-two: 2
        number-three: 3

我尝试在SubB类中添加一个简单的映射声明:

...
@Data 
public static class SubB {
  private String qux;
  private Map<String, Integer> map = new HashMap<>();
}

当我运行这个时,所有其他属性都在配置中,但映射是空的。我还尝试不初始化映射,但它保持为空。

我的SpringBootApplication类以前只使用了一个注释就可以很好地工作。基于其他一些StackOverflow问题,我尝试添加EnableConfigurationProperties,但没有什么不同。

共有2个答案

狄阳华
2023-03-14
  1. 对于YAML文件,application.yml会自动加载。如果文件名是其他名称,Spring不会自动加载。
  2. @Property tySource从SprintBoot 2.1开始不适用于YAML
  3. 如果YAML文件需要不同的名称,我们需要设置spring.config.namespring.config.location
    https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-external-config-yaml
  4. 下面的链接也指出了一个很好的答案:
    在Java中从yaml读取地图变得为空
薛涛
2023-03-14

这个例子确实很好。我特别的问题是一个配置文件没有被读取。

 类似资料:
  • 我有以下DTO和域对象。我正在使用Mapstruct将域对象复制到DTO对象。 使用下面的映射器将域映射到DTO。我不想将电话属性从域映射到DTO。怎么做?我尝试在mapping ignore中提供嵌套目标属性,但它给出了错误:

  • 这是我的DTO: 这是我的实体: 我想配置我的ModelMapper将Tag#id映射到TagVolumeDTO#idTag。这可能吗?

  • 以下结构: . 据我所知,ObjectId的概念是,MongoDB文档中只能有一个ObjectId(\u id),它必须位于文档的根级别。但当通过Spring Boot 1.5.14插入数据时,我得到以下结构: 我的问题是:这是Spring data-mongo中的预期行为吗?我预计会有以下结构: 如果我用@Field注释位置ID 然后按预期保存文档,但使用repository方法进行查询 不会给

  • 问题内容: 假设我正在调用一个API,该API用产品的以下JSON响应: 我可以使用Jackson标注来映射产品ID和名称: 然后使用fromJson方法创建产品: 但是现在我试图弄清楚如何获取品牌名称,这是一个嵌套属性。我希望这样的事情会起作用: 但是,当然没有。有没有一种简单的方法可以使用注释来完成我想要的工作? 我尝试解析的实际JSON响应非常复杂,即使我只需要一个字段,我也不必为每个子节点

  • 但当然没有。有没有一个简单的方法来完成我想要的使用注释? 我试图解析的实际JSON响应非常复杂,我不想为每个子节点创建一个完整的新类,即使我只需要一个字段。

  • 问题内容: 假设我正在调用一个API,该API以产品的以下JSON响应: 我可以使用Jackson标注来映射产品ID和名称: 然后使用fromJson方法创建产品: 但是,现在我试图弄清楚如何获取品牌名称,这是一个嵌套属性。我希望这样的事情会起作用: 但是,当然没有。有没有一种简单的方法可以使用注释来完成我想要的工作? 我尝试解析的实际JSON响应非常复杂,即使我只需要一个字段,我也不必为每个子节