Java實(shí)現(xiàn)調(diào)用接口API并返回?cái)?shù)據(jù)
Java調(diào)用接口API并返回?cái)?shù)據(jù)
Get方法
import com.alibaba.fastjson.JSONObject; import edu.zhku.fire_ant_project.config.WxConstant; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpCallOtherInterfaceUtils { public static void main(String args[]) { HttpClient client = HttpClients.createDefault(); // 要調(diào)用的接口方法 String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ WxConstant.appid +"&secret="+WxConstant.secret; HttpGet httpGet=new HttpGet(url); JSONObject jsonObject = null; try { HttpResponse res = client.execute(httpGet); if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 返回json格式: jsonObject = JSONObject.parseObject(EntityUtils.toString(res.getEntity())); System.out.println(jsonObject); } } catch (Exception e) { System.out.println("服務(wù)間接口調(diào)用出錯(cuò)!"); e.printStackTrace(); } } }
post方法
import com.alibaba.fastjson.JSONObject; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class HttpCallOtherInterfaceUtils { public static String callOtherInterface(JSONObject jsonParam, String port, String postUrl) { HttpClient client = HttpClients.createDefault(); // 要調(diào)用的接口方法 String url = "http://localhost:" + port + postUrl; HttpPost post = new HttpPost(url); JSONObject jsonObject = null; try { StringEntity s = new StringEntity(jsonParam.toString(), "UTF-8"); //s.setContentEncoding("UTF-8");//此處測試發(fā)現(xiàn)不能單獨(dú)設(shè)置字符串實(shí)體的編碼,否則出錯(cuò)!應(yīng)該在創(chuàng)建對象時(shí)創(chuàng)建 s.setContentType("application/json"); post.setEntity(s); post.addHeader("content-type", "application/json;charset=UTF-8"); HttpResponse res = client.execute(post); if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { // 返回json格式: jsonObject = JSONObject.parseObject(EntityUtils.toString(res.getEntity())); } } catch (Exception e) { System.out.println("服務(wù)間接口調(diào)用出錯(cuò)!"); e.printStackTrace(); //throw new RuntimeException(e); } return jsonObject.toString(); } }
Java跨服務(wù)調(diào)用接口
Java程序跨服務(wù)調(diào)用接口,通常可以使用以下方式:
- RESTful API:通過HTTP協(xié)議進(jìn)行通信,使用RESTful API調(diào)用其他服務(wù)的接口。
- RPC:使用遠(yuǎn)程過程調(diào)用(RPC)框架,如Dubbo、gRPC等,通過序列化和反序列化技術(shù)實(shí)現(xiàn)跨服務(wù)調(diào)用。
- 消息隊(duì)列:使用消息隊(duì)列,如Kafka、RabbitMQ等,服務(wù)之間通過消息隊(duì)列進(jìn)行異步通信。
- HTTP客戶端:使用Java內(nèi)置的HTTP客戶端,如HttpURLConnection、Apache HttpClient等,通過HTTP協(xié)議調(diào)用其他服務(wù)的接口。
無論使用哪種方式,都需要了解其他服務(wù)的接口定義和調(diào)用方式,以及網(wǎng)絡(luò)通信的安全性和穩(wěn)定性等方面的考慮。同時(shí),需要注意接口版本的兼容性和錯(cuò)誤處理等問題。
這里提供一個(gè)使用Java內(nèi)置的HttpURLConnection進(jìn)行POST請求的示例代碼:
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class HttpPostExample { private static final String POST_URL = "http://engine-server-host:port/api/client/data/push"; private static final String USER_AGENT = "Mozilla/5.0"; public static void main(String[] args) throws IOException { URL obj = new URL(POST_URL); HttpURLConnection con = (HttpURLConnection) obj.openConnection(); // 添加請求頭 con.setRequestMethod("POST"); con.setRequestProperty("User-Agent", USER_AGENT); con.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); // 設(shè)置POST請求體 String postBody = "your_post_body_here"; con.setDoOutput(true); try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { wr.writeBytes(postBody); wr.flush(); } // 發(fā)送POST請求并獲取響應(yīng) int responseCode = con.getResponseCode(); System.out.println("POST Response Code :: " + responseCode); try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) { String inputLine; StringBuilder response = new StringBuilder(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } System.out.println("POST Response :: " + response.toString()); } } }
在代碼中,需要將POST_URL替換為引擎端的API接口地址,將postBody替換為要發(fā)送的POST請求體。
需要注意的是,這里的POST請求體需要按照引擎端API接口的要求進(jìn)行格式化。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java ZooKeeper分布式鎖實(shí)現(xiàn)圖解
ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等2022-03-03SpringBoot DevTools之開發(fā)工具與熱部署機(jī)制詳解
本文將深入探討Spring Boot DevTools的核心功能、配置方法以及最佳實(shí)踐,幫助開發(fā)者顯著提升開發(fā)效率,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04springboot如何使用redis的incr創(chuàng)建分布式自增id
這篇文章主要介紹了springboot如何使用redis的incr創(chuàng)建分布式自增id,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11Intellij IDEA 添加jar包的三種方式(小結(jié))
這篇文章主要介紹了Intellij IDEA 添加jar包的三種方式(小結(jié)),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08Java Spring數(shù)據(jù)單元配置過程解析
這篇文章主要介紹了Java Spring數(shù)據(jù)單元配置過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12web.xml?SpringBoot打包可執(zhí)行Jar運(yùn)行SpringMVC加載流程
這篇文章主要為大家介紹了web.xml?SpringBoot打包可執(zhí)行Jar運(yùn)行SpringMVC加載流程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04