You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中YAML配置无法注入Map的问题求助

Spring Boot配置映射为空的解决方法

1. 修复application.yml的格式错误

原配置中,"001"、"002"作为YAML的键,后面缺少冒号,导致YAML解析器无法识别为合法的键值对结构。正确的配置格式如下:

org:
  "001":
    "001":
      name: somename
      location: somelocation
  "002":
    "001":
      name: somename
      location: somelocation

2. 修正配置类的绑定路径问题

你的MyData类使用了@ConfigurationProperties(prefix = "org"),但类内字段名也是org,这会导致绑定路径变为org.org,与实际配置的org节点不匹配,因此无法映射数据。有两种修复方式:

方式一:移除prefix,直接绑定根节点

修改MyData类,去掉prefix属性,让类内的org字段直接绑定配置文件的org节点:

@Component
@ConfigurationProperties
public class MyData {
    private Map<String, Map<String, Metadata>> org = new HashMap<>();

    // 正确的Getter和Setter
    public Map<String, Map<String, Metadata>> getOrg() {
        return org;
    }

    public void setOrg(Map<String, Map<String, Metadata>> org) {
        this.org = org;
    }
}

方式二:修改字段名,匹配prefix路径

保留prefix = "org",将类内字段名改为非org的名称(比如data),这样配置文件中org节点下的内容会直接绑定到该字段:

@Component
@ConfigurationProperties(prefix = "org")
public class MyData {
    private Map<String, Map<String, Metadata>> data = new HashMap<>();

    // 正确的Getter和Setter
    public Map<String, Map<String, Metadata>> getData() {
        return data;
    }

    public void setData(Map<String, Map<String, Metadata>> data) {
        this.data = data;
    }
}

注意:如果用这种方式,控制器中需要同步修改为mydata.getData()。

3. 确保Metadata类的Getter/Setter正确

确认Metadata类的name和location字段有public的Getter和Setter方法,Spring Boot依赖这些方法完成属性注入:

public class Metadata {
    private String name;
    private String location;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLocation() {
        return location;
    }

    public void setLocation(String location) {
        this.location = location;
    }
}

4. 引入配置处理器依赖(可选但推荐)

添加spring-boot-configuration-processor依赖,帮助IDE提供配置提示,并确保配置绑定逻辑更稳定:

Maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

Gradle依赖

annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'

完成以上修改后,重启项目即可正常获取配置数据。

内容的提问来源于stack exchange,提问作者Thiagarajan Ramanathan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:17:44