【我要編程】Java技術(shù)手冊(cè)之調(diào)用http請(qǐng)求的示例

該示例展示如何調(diào)用對(duì)方寫好的http接口,數(shù)據(jù)格式對(duì)方需要雙方協(xié)調(diào)定義好。

思路如下:我方調(diào)用對(duì)方接口(另一個(gè)服務(wù)器上已寫好锭沟,不同域名,不同端口壕探,需要進(jìn)行跨域)冈钦,傳遞必要參數(shù),如id等李请,對(duì)方接受參數(shù)進(jìn)行查詢瞧筛,查詢到的數(shù)據(jù)封裝成json格式返回,我方接收到的是一個(gè)流對(duì)象导盅,需要轉(zhuǎn)換成json字符串较幌,再把json字符串轉(zhuǎn)換成對(duì)象,封裝到結(jié)果集里返回(這里返回的是調(diào)用我方接口的使用者白翻,如手機(jī)app調(diào)用我的接口)乍炉。

@RequestMapping(value = "details", method = RequestMethod.GET)

public ResponseResult details(@RequestParam("processInstanceId") String processInstanceId,

String recordNumber,Integer pageSize, HttpServletRequest request, HttpServletResponse response) {

String url =

"http://218.95.182.35:5555/dcxm/Compass/workflow/data/hisInfo?processInstanceId="+processInstanceId;

String jo = HttpUtils.httpRequest(url, "GET", null,null);

//雙方定義好的數(shù)據(jù)格式

CapResultBean jb = JsonUtil.jsonStrToPo(jo, CapResultBean.class);

????boolean success = jb.isSuccess();

if(success == true) {

return ResponseResult.ok(jb.getObj()); //ResponseResult是自定義的結(jié)果集

}

return ResponseResult.build(500, "服務(wù)器異常");

}

HttpUtils工具類:

package com.hollysmart.app.common.utils;


import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.ConnectException;

import java.net.HttpURLConnection;

import java.net.URL;


import org.apache.http.HttpEntity;

import org.apache.http.HttpStatus;

import org.apache.http.client.methods.CloseableHttpResponse;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;


import net.sf.json.JSONObject;


public abstract class HttpUtils {


private static final Logger logger = LoggerFactory.getLogger(HttpUtils.class);


private HttpUtils() {

}


/**

*根據(jù)Url發(fā)送GET請(qǐng)求

?*

?* @param url

?* @return

?*/

public static String get(String url) {

CloseableHttpClient httpClient = HttpClients.createDefault();

HttpGet httpGet = new HttpGet(url);

CloseableHttpResponse response = null;

String result = "";

try {

response = httpClient.execute(httpGet);


/**請(qǐng)求發(fā)送成功,并得到響應(yīng) **/

if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

HttpEntity entity = response.getEntity();


result = EntityUtils.toString(entity, "UTF-8");


EntityUtils.consume(entity);

}

} catch (Exception e) {

logger.error("遠(yuǎn)程數(shù)據(jù)獲取失斅蒜伞岛琼!", e);

e.printStackTrace();

} finally {

try {

if (response != null)

response.close();

} catch (IOException e) {

e.printStackTrace();

}

}


return result;

}

/**

*描述: 發(fā)起http請(qǐng)求并獲取結(jié)果

?*

?* @param requestUrl

*請(qǐng)求地址

?* @param requestMethod

*請(qǐng)求方式(GET、POST)

?* @param outputStr

*提交的數(shù)據(jù)

* @return JSONObject(通過(guò)JSONObject.get(key)的方式獲取json對(duì)象的屬性值)

?*/

public static String httpRequest(String requestUrl, String requestMethod, String outputStr,String dataType) {

StringBuffer buffer = new StringBuffer();

String result = null;

try {


URL url = new URL(requestUrl);

HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();

httpUrlConn.setDoOutput(true);

httpUrlConn.setDoInput(true);

httpUrlConn.setUseCaches(false);


//設(shè)置請(qǐng)求方式(GET/POST)

httpUrlConn.setRequestMethod(requestMethod);

if(StringUtils.equals(dataType, "json")) {

httpUrlConn.setRequestProperty("Content-type", "application/json");

}


if ("GET".equalsIgnoreCase(requestMethod))

httpUrlConn.connect();


//當(dāng)有數(shù)據(jù)需要提交時(shí)

if (null != outputStr) {

OutputStream outputStream = httpUrlConn.getOutputStream();

//注意編碼格式巢株,防止中文亂碼

outputStream.write(outputStr.getBytes("UTF-8"));

outputStream.close();

}


//將返回的輸入流轉(zhuǎn)換成字符串

InputStream inputStream = httpUrlConn.getInputStream();

InputStreamReader inputStreamReader =

new InputStreamReader(inputStream, "utf-8");

BufferedReader bufferedReader = new BufferedReader(inputStreamReader);


String str = null;

while ((str = bufferedReader.readLine()) != null) {

buffer.append(str);

}

bufferedReader.close();

inputStreamReader.close();

//釋放資源

inputStream.close();

inputStream = null;

httpUrlConn.disconnect();

result = buffer.toString();

//jsonObject = JSONObject.fromObject(buffer.toString());

} catch (ConnectException ce) {

ce.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return result;

}

}


免費(fèi)學(xué)習(xí)編程:www.51program.com

全套Java課程免費(fèi)分享請(qǐng)關(guān)注微信公眾號(hào):我要編程(微信號(hào):oset51)

技術(shù)交流群:259657781

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末槐瑞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子阁苞,更是在濱河造成了極大的恐慌困檩,老刑警劉巖祠挫,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異悼沿,居然都是意外死亡等舔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門糟趾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)慌植,“玉大人,你說(shuō)我怎么就攤上這事拉讯〉咏剑” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵魔慷,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我著恩,道長(zhǎng)院尔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任喉誊,我火速辦了婚禮邀摆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘伍茄。我一直安慰自己栋盹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布敷矫。 她就那樣靜靜地躺著例获,像睡著了一般。 火紅的嫁衣襯著肌膚如雪曹仗。 梳的紋絲不亂的頭發(fā)上榨汤,一...
    開(kāi)封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音怎茫,去河邊找鬼收壕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛轨蛤,可吹牛的內(nèi)容都是我干的蜜宪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼祥山,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼圃验!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起枪蘑,我...
    開(kāi)封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤损谦,失蹤者是張志新(化名)和其女友劉穎岖免,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體照捡,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颅湘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了栗精。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闯参。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖悲立,靈堂內(nèi)的尸體忽然破棺而出鹿寨,到底是詐尸還是另有隱情,我是刑警寧澤薪夕,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布脚草,位于F島的核電站,受9級(jí)特大地震影響原献,放射性物質(zhì)發(fā)生泄漏馏慨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一姑隅、第九天 我趴在偏房一處隱蔽的房頂上張望写隶。 院中可真熱鬧,春花似錦讲仰、人聲如沸慕趴。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冕房。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捡需。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留觅玻,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓培漏,卻偏偏與公主長(zhǎng)得像溪厘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子牌柄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容