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

Spring Boot 3中@Value注入配置报错:无法解析占位符

问题分析与解决方案

问题原因

出现Could not resolve placeholder错误的核心原因:

  • 使用@ConfigurationProperties绑定配置时,Spring默认不会将这些属性暴露到全局Environment中,因此@Value无法直接解析对应的占位符。
  • 额外注意:你的配置记录类存在拼写错误,CrosAllowedOrigins应为CorsAllowedOrigins(正确拼写是cors而非cros),虽不会直接触发当前错误,但建议修正以避免后续潜在问题。

解决方案

方案一:直接注入配置记录类(推荐)

这是Spring Boot配置属性的最佳实践,避开@Value的局限性,直接将配置记录类注入到SecurityConfig中:

public class SecurityConfig {
    private final List<String> allowedOrigins;

    // 构造函数注入配置记录类
    public SecurityConfig(CrosAllowedOrigins corsAllowedOrigins) {
        this.allowedOrigins = corsAllowedOrigins.urlOrigins();
    }

    // 后续直接使用allowedOrigins即可
}

方案二:将配置属性暴露到Environment(不推荐)

如果一定要用@Value,可通过以下方式让配置属性进入Environment:

  1. 在配置记录类上添加@Configuration注解,使其成为Spring Bean并将属性暴露到Environment:
@Configuration
@ConfigurationProperties("cors-allowed-origins")
public record CorsAllowedOrigins(List<String> urlOrigins) {
}
  1. 保留主类上的@EnableConfigurationProperties,此时@Value("${cors-allowed-origins.url-origins}")即可正常解析。

补充说明

优先选择方案一,因为@ConfigurationProperties提供了更强大的配置绑定能力(如类型转换、参数验证等),而@Value更适合简单的单个属性注入。对于嵌套结构或集合类型的配置,使用配置记录类更规范、更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 19:02:43