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

Spring Boot ConfigurationProperties绑定Map<String,List<Query>>失败问题

问题解决:Spring Boot @ConfigurationProperties 绑定失败

问题根源

你的YAML配置结构与Java类的类型不匹配:

  • 配置中每个列表元素多了一层query节点,但Query类直接包含matchType属性;
  • units定义为Map<String, List<Query>>,对应的配置应该是键值对形式,每个键对应一个Query对象的列表,而非嵌套query的结构。

解决方案

方案1:调整YAML配置(推荐)

移除多余的query层,让列表元素直接对应Query类的属性:

com:
  test:
    app:
      units:
        unit:  # 此处为Map的key,可自定义命名
          - matchType: "sadas"
          - matchType: "sadas"

调整后,units Map中会生成一个key为unit的条目,其值是包含两个Query对象的列表,每个对象的matchType属性会被正确绑定。

方案2:调整Java类结构(适配现有配置)

如果需要保留配置中的query层,新增一个包装类来匹配配置结构:

public class UnitEntry {
    private Query query;
    // 必须添加getter和setter方法
    public Query getQuery() {
        return query;
    }
    public void setQuery(Query query) {
        this.query = query;
    }
}

然后修改UnitsConfiguration的属性类型:

@Component
@ConfigurationProperties(prefix = "com.test.app")
public class UnitsConfiguration {
    private Map<String, List<UnitEntry>> units;
    // 必须添加getter和setter方法
    public Map<String, List<UnitEntry>> getUnits() {
        return units;
    }
    public void setUnits(Map<String, List<UnitEntry>> units) {
        this.units = units;
    }
}

此时配置中的unit[0].query.matchType会正确绑定到UnitEntry的query属性下的matchType字段。

注意:所有相关类必须提供完整的getter和setter方法,Spring Boot的@ConfigurationProperties依赖这些方法完成属性绑定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 07:10:33