Spring Boot中OpenAI API Key无效引发401错误的排查
1. 静态字段无法通过@Value注入配置值(最可能的原因)
你的API_KEY被定义为public static final,但Spring的@Value注解无法直接注入静态字段,这会导致API_KEY始终是空字符串,最终生成的TOKEN为Bearer (空值拼接),自然会被OpenAI接口判定为未授权。
修正方案:
去掉static修饰符改为实例字段,或通过@PostConstruct初始化静态字段:
// 方案1:移除static,改为实例字段 @Value("${api.key}") private String apiKey; public final String TOKEN = "Bearer " + apiKey; // 方案2:保留static,通过@PostConstruct赋值 private static String apiKey; @Value("${api.key}") public void setApiKey(String key) { apiKey = key; } public static final String TOKEN = "Bearer " + apiKey;
2. 请求头配置不完整或错误
检查OpenAIConstants.AUTHORIZATION的实际值是否为Authorization(注意大小写),OpenAI API严格要求该键名,拼写错误会直接导致鉴权失败。
同时,需显式设置请求的Content-Type为application/json,未设置会导致OpenAI无法解析请求体,间接返回401:
HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); // 添加该行 headers.add(OpenAIConstants.AUTHORIZATION, OpenAIConstants.TOKEN);
3. API Key或账号状态异常
即使更换新Key,仍需确认:
- 该Key所属账号未被封禁,且处于正常状态
- Key拥有调用
v1/completions接口的权限(部分限制级Key无法访问特定模型) - 账号存在可用余额,OpenAI在余额耗尽时也会返回401错误
4. RestTemplate配置问题
若RestTemplate未配置Jackson消息转换器,会导致请求体序列化异常,OpenAI无法识别请求内容进而返回401。确保配置正确的消息转换器:
@Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); return restTemplate; }
内容的提问来源于stack exchange,提问作者programmer
相关产品推荐
相关产品推荐

