
Spring Boot 默认不支持直接读取 .env 文件,需通过 spring.config.import 显式导入;本文详解如何配置以安全、可靠地注入 EXCHANGE_API_API_KEY 并避免“No API key found in request”错误。
spring boot 默认不支持直接读取 `.env` 文件,需通过 `spring.config.import` 显式导入;本文详解如何配置以安全、可靠地注入 `exchange_api_api_key` 并避免“no api key found in request”错误。
在 Spring Boot 2.4+ 版本中,.env 文件不会被自动加载——即使你将其放在项目根目录并配置了 @Value("${EXCHANGE_API_API_KEY}"),若未显式声明导入方式,Spring 将无法解析该变量,最终回退到默认值(如 default-key),导致调用 Apilayer API 时返回 {"message":"No API key found in request"}。
✅ 正确解决方案是:在 application.yml 中启用外部属性文件导入功能:
spring:
config:
import: optional:file:.env[.properties]
⚠️ 注意事项:
- optional:file: 表示该文件非必需,缺失时不会启动失败;
- .env[.properties] 是 Spring Boot 的特殊语法,表示优先尝试加载 .env(按 .properties 格式解析),兼容常见环境变量写法(如 KEY=VALUE);
- .env 文件必须位于当前工作目录(即运行 java -jar ... 时的路径)下,而非 src/main/resources/;推荐将其置于项目根目录,并确保部署时一同发布(但务必已加入 .gitignore);
- 若使用 IDE 运行(如 IntelliJ),需在「Run Configuration」→ 「Environment variables」中额外设置 EXCHANGE_API_API_KEY,或在 IDE 启动配置中指定工作目录为项目根路径,否则 .env 可能不被识别。
配置生效后,application.yml 中的占位符即可正常解析:
exchange-api:
api-key: ${EXCHANGE_API_API_KEY:default-key} # ✅ 现在能正确读取 .env 中的值
同时,请确保你的 .env 文件格式规范(无空格、无引号、UTF-8 编码):
EXCHANGE_API_API_KEY=abcd1234efgh5678ijkl9012mnop3456
? 额外建议:
- 避免静态字段 + @Value 注入:当前 Constants 类中使用 public static String EXCHANGE_API_API_KEY 并配合 @Value setter 是反模式——静态字段无法被 Spring 管理生命周期,且在多线程/热部署场景下易引发状态不一致。推荐改为 @ConfigurationProperties 绑定:
@ConfigurationProperties(prefix = "exchange-api")
@Component
@Data // Lombok
public class ExchangeApiProperties {
private String apiUrl;
private String apiKey; // ✅ 自动绑定 .env 中的 EXCHANGE_API_API_KEY
private Integer apiCallLimit;
private String cacheName;
}
- Header 键名确认:Apilayer 要求 API Key 通过 apikey 请求头传递(区分大小写),你的代码 headers.add("apikey", ...) 是正确的,无需修改。
完成上述配置后重启应用,RestTemplate 发出的请求将携带真实密钥,UnrecognizedPropertyException 和 message: No API key found 错误将彻底消失。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










