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

Spring Controller读取application.yaml配置并返回Map的可行方案求助

解决方案:Spring中从application.yaml绑定String类型Map并返回前端

问题根源

你原有的application.yaml采用了列表(-)结构,对应的数据类型是List<自定义对象>,而非你需要的Map<String,String>;同时直接使用@Value("${bandwidth.configurations}")无法将配置内容直接解析为Map,需要调整配置结构和绑定方式。


方式一:使用@Value结合SpEL绑定Map

1. 修改application.yaml配置

将配置改为直接的键值对Map结构:

bandwidth:
  configurations:
    a: AAA
    e: TTT
    I: FFF
    o: XXX

2. 调整Controller代码

通过SpEL表达式#{${bandwidth.configurations}}完成Map的正确绑定:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.beans.factory.annotation.Value;
import java.util.Map;

@RestController
@RequestMapping("/bandwidth")
public class BandwidthController {

    @Value("#{${bandwidth.configurations}}")
    private Map<String, String> configurations;

    @GetMapping("/config")
    public Map<String, String> getListOfPath() {
        return configurations;
    }
}

方式二:使用@ConfigurationProperties(推荐)

这种方式更适合复杂配置场景,支持类型校验、前缀绑定,代码结构更清晰。

1. 创建配置类

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Map;

@Component
@ConfigurationProperties(prefix = "bandwidth")
public class BandwidthProperties {
    private Map<String, String> configurations;

    // Getter和Setter
    public Map<String, String> getConfigurations() {
        return configurations;
    }

    public void setConfigurations(Map<String, String> configurations) {
        this.configurations = configurations;
    }
}

2. Controller中注入配置类

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;

@RestController
@RequestMapping("/bandwidth")
public class BandwidthController {

    private final BandwidthProperties bandwidthProperties;

    // 构造方法注入(Spring推荐的依赖注入方式)
    public BandwidthController(BandwidthProperties bandwidthProperties) {
        this.bandwidthProperties = bandwidthProperties;
    }

    @GetMapping("/config")
    public Map<String, String> getListOfPath() {
        return bandwidthProperties.getConfigurations();
    }
}

3. 保持application.yaml配置与方式一一致

bandwidth:
  configurations:
    a: AAA
    e: TTT
    I: FFF
    o: XXX

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:33:23