Java 8如何发送HTTP GET请求获取Bearer Token并解析返回JSON
Java 8 环境下获取Bearer Token实现方案
给出的curl命令逻辑为:向鉴权接口发送带URL编码用户名、密钥参数的GET请求,从返回的JSON中提取Value字段作为Bearer Token,Java 8下的等效实现如下:
可直接复用的实现代码
代码使用JDK原生网络组件发起请求,JSON解析部分以常用的Jackson为例,如果你项目中已有其他JSON工具(Gson、Fastjson等)可直接替换解析逻辑:
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class TokenFetcher { /** * 调用鉴权接口获取Bearer Token * @param username 接口用户名 * @param secret 接口密钥 * @return 提取到的Bearer Token值 * @throws Exception 网络、解析异常 */ public static String fetchBearerToken(String username, String secret) throws Exception { // 对参数做URL编码,完全对齐curl --data-urlencode的处理逻辑 String encodedUsername = URLEncoder.encode(username, StandardCharsets.UTF_8.name()); String encodedSecret = URLEncoder.encode(secret, StandardCharsets.UTF_8.name()); String queryStr = String.format("username=%s&secret=%s", encodedUsername, encodedSecret); URL apiUrl = new URL("https://api.company.com/api/auth?" + queryStr); HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection(); connection.setRequestMethod("GET"); // 按需调整超时时间,单位毫秒 connection.setConnectTimeout(5000); connection.setReadTimeout(10000); StringBuilder responseContent = new StringBuilder(); // 自动关闭流资源 try (BufferedReader br = new BufferedReader( new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8))) { String line; while ((line = br.readLine()) != null) { responseContent.append(line); } } finally { connection.disconnect(); } // 解析响应JSON,提取Value字段 ObjectMapper mapper = new ObjectMapper(); JsonNode respNode = mapper.readTree(responseContent.toString()); return respNode.get("Value").asText(); } // 调用示例 public static void main(String[] args) throws Exception { String token = fetchBearerToken("替换为你的实际用户名", "替换为你的实际secret"); System.out.println("获取到的Token:" + token); // 后续调用其他接口时,在请求头添加 Authorization: Bearer <token> 即可完成鉴权 } }
注意事项
- 如果不需要引入第三方JSON库,也可以手动截取响应字符串中的
Value字段值,但鲁棒性较差,生产环境不推荐。 - 生产使用时建议增加响应状态码判断:在读取响应流前先校验
connection.getResponseCode()是否为200,非200状态下从错误流读取返回信息做异常处理。 - 代码默认接口返回的
Value字段在JSON最外层,如果字段存在嵌套,调整JSON解析的取值路径即可。
内容的提问来源于stack exchange,提问作者user2563087
相关产品推荐
相关产品推荐

