Java實現(xiàn)調用接口API并返回數(shù)據(jù)
Java調用接口API并返回數(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();
// 要調用的接口方法
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("服務間接口調用出錯!");
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();
// 要調用的接口方法
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)不能單獨設置字符串實體的編碼,否則出錯!應該在創(chuàng)建對象時創(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("服務間接口調用出錯!");
e.printStackTrace();
//throw new RuntimeException(e);
}
return jsonObject.toString();
}
}
Java跨服務調用接口
Java程序跨服務調用接口,通??梢允褂靡韵路绞剑?/p>
- RESTful API:通過HTTP協(xié)議進行通信,使用RESTful API調用其他服務的接口。
- RPC:使用遠程過程調用(RPC)框架,如Dubbo、gRPC等,通過序列化和反序列化技術實現(xiàn)跨服務調用。
- 消息隊列:使用消息隊列,如Kafka、RabbitMQ等,服務之間通過消息隊列進行異步通信。
- HTTP客戶端:使用Java內置的HTTP客戶端,如HttpURLConnection、Apache HttpClient等,通過HTTP協(xié)議調用其他服務的接口。
無論使用哪種方式,都需要了解其他服務的接口定義和調用方式,以及網(wǎng)絡通信的安全性和穩(wěn)定性等方面的考慮。同時,需要注意接口版本的兼容性和錯誤處理等問題。
這里提供一個使用Java內置的HttpURLConnection進行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");
// 設置POST請求體
String postBody = "your_post_body_here";
con.setDoOutput(true);
try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) {
wr.writeBytes(postBody);
wr.flush();
}
// 發(fā)送POST請求并獲取響應
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īng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java字節(jié)與字符流永久存儲json數(shù)據(jù)
本篇文章給大家詳細講述了Java字節(jié)與字符流永久存儲json數(shù)據(jù)的方法,以及代碼分享,有興趣的參考學習下。2018-02-02
SpringBoot框架集成ElasticSearch實現(xiàn)過程示例詳解
這篇文章主要為大家介紹了SpringBoot如何集成ElasticSearch的實現(xiàn)過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2021-11-11
Java語言實現(xiàn)簡單FTP軟件 FTP軟件本地窗口實現(xiàn)(5)
這篇文章主要為大家詳細介紹了Java語言實現(xiàn)簡單FTP軟件,F(xiàn)TP軟件本地窗口的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-03-03
springboot使用jasypt加密庫實現(xiàn)數(shù)據(jù)庫加解密示例代碼
這篇文章主要給大家介紹了關于springboot使用jasypt加密庫實現(xiàn)數(shù)據(jù)庫加解密的相關資料,Jasypt是一個用于配置文件加密的Java庫,它可以用來加密和解密配置文件中的敏感信息,如數(shù)據(jù)庫密碼、API?密鑰等,需要的朋友可以參考下2024-04-04

