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

Java中如何将API调用返回的Token存储为变量

嘿,我来帮你搞定这个Token提取的问题!首先明确说一句:你完全不需要用到getHeaders()方法——因为你的Token是在HTTP响应的**响应体(JSON内容)**里,而不是在响应头里,所以操作响应体就够了。

接下来给你具体的实现步骤和代码示例,这里提供两种业界常用的JSON解析方案,你可以根据自己的项目场景选择:

方案1:使用轻量的org.json库(适合简单场景)

这个库小巧轻便,不需要复杂配置,直接解析JSON字符串就能提取Token。

首先我们要把响应的所有内容读取成完整字符串(代替原来的逐行打印),再解析提取Token:

import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

public class TokenHandler {
    // 初始化HttpClient实例(根据你的实际情况调整)
    private final CloseableHttpClient client = HttpClientBuilder.create().build();

    public String getToken(String userID) throws URISyntaxException, IOException, JSONException {
        URIBuilder userBuild = new URIBuilder("https://api/token");
        // 如果需要传递userID参数,可在这里添加:userBuild.setParameter("user_id", userID);
        HttpPost post = new HttpPost(userBuild.build());
        
        // 获取完整的JSON响应字符串
        String jsonResponse = fetchResponseContent(post);
        
        // 解析JSON提取Token
        JSONObject jsonObject = new JSONObject(jsonResponse);
        return jsonObject.getString("token");
    }

    private String fetchResponseContent(HttpPost post) throws IOException {
        HttpResponse response = client.execute(post);
        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }
        rd.close();
        return sb.toString();
    }
}

方案2:使用Jackson库(适合复杂项目,比如Spring环境)

如果你的项目已经在用Jackson(很多Java Web项目都会依赖它),可以用ObjectMapper解析,甚至定义一个DTO类来更优雅地处理:

首先定义一个对应响应结构的DTO类:

public class TokenResponse {
    private String token;

    // Jackson需要无参构造器
    public TokenResponse() {}

    // Getter和Setter方法
    public String getToken() {
        return token;
    }

    public void setToken(String token) {
        this.token = token;
    }
}

然后修改你的Token获取方法:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URISyntaxException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;

public class TokenHandler {
    private final CloseableHttpClient client = HttpClientBuilder.create().build();
    private final ObjectMapper objectMapper = new ObjectMapper();

    public String getToken(String userID) throws URISyntaxException, IOException {
        URIBuilder userBuild = new URIBuilder("https://api/token");
        HttpPost post = new HttpPost(userBuild.build());
        
        String jsonResponse = fetchResponseContent(post);
        
        // 直接将JSON字符串转为DTO对象,获取Token
        TokenResponse tokenResponse = objectMapper.readValue(jsonResponse, TokenResponse.class);
        return tokenResponse.getToken();
    }

    private String fetchResponseContent(HttpPost post) throws IOException {
        HttpResponse response = client.execute(post);
        BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        StringBuilder sb = new StringBuilder();
        String line;
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }
        rd.close();
        return sb.toString();
    }
}

一些额外提示:

  • 记得添加对应依赖:
    • 用org.json的话,Maven依赖:
      <dependency>
          <groupId>org.json</groupId>
          <artifactId>json</artifactId>
          <version>20240303</version>
      </dependency>
      
    • 用Jackson的话,Maven依赖:
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.15.2</version>
      </dependency>
      
  • 建议添加异常捕获逻辑,比如处理API返回非预期JSON格式的情况,避免程序直接崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 16:08:13