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

Java中如何从API响应体提取access_token并保存为字符串?

解决方案:从Spotify API的JSON响应中提取access_token

首先明确两个关键点:

  1. java.net包仅负责HTTP请求的发送与响应接收,没有内置JSON解析能力,无法直接从响应体中提取指定字段;
  2. 你最初的判断是对的——Spotify的access_token不在响应头里,而是存储在响应体的JSON数据中,必须解析完整响应体才能获取。

下面提供几种常用的实现方式:


方式一:使用Jackson Databind(推荐,生态完善)

Jackson是Java生态中最常用的JSON处理库,支持将JSON映射为Java对象或直接读取指定字段。

步骤1:添加依赖

如果使用Maven,在pom.xml中加入:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

步骤2:修改代码提取access_token

可以直接用ObjectMapper将JSON字符串解析为Map,快速提取目标字段:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;

public class App {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://accounts.spotify.com/api/token"))
                .header("Content-Type", "application/x-www-form-urlencoded")
                .method("POST", HttpRequest.BodyPublishers.ofString("grant_type=client_credentials&client_id=[MY_ID]&client_secret=[MY_SECRET]"))
                .build();
        HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        
        // 解析JSON并提取access_token
        ObjectMapper objectMapper = new ObjectMapper();
        Map<String, Object> responseMap = objectMapper.readValue(response.body(), Map.class);
        String accessToken = (String) responseMap.get("access_token");
        
        System.out.println("提取到的access_token:" + accessToken);
        // 后续可直接使用accessToken变量调用需要认证的API
    }
}

方式二:使用org.json(轻量,无需定义实体类)

如果只需要简单读取单个字段,org.json库足够轻便,无需提前定义POJO类。

步骤1:添加依赖

Maven依赖:

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20230618</version>
</dependency>

步骤2:修改代码

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import org.json.JSONObject;

public class App {
    public static void main(String[] args) throws Exception {
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://accounts.spotify.com/api/token"))
                .header("Content-Type", "application/x-www-form-urlencoded")
                .method("POST", HttpRequest.BodyPublishers.ofString("grant_type=client_credentials&client_id=[MY_ID]&client_secret=[MY_SECRET]"))
                .build();
        HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        
        // 解析JSON并提取access_token
        JSONObject jsonResponse = new JSONObject(response.body());
        String accessToken = jsonResponse.getString("access_token");
        
        System.out.println("提取到的access_token:" + accessToken);
    }
}

不推荐:正则表达式提取

如果不想引入第三方库,可以用正则匹配临时提取,但这种方式容易因为JSON格式变化(比如字段顺序、空格)出错,仅适合快速测试:

// 在获取response.body()后添加
String responseBody = response.body();
String accessToken = responseBody.replaceAll(".*\"access_token\":\"(.*?)\".*", "$1");
System.out.println(accessToken);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:21