Java實(shí)現(xiàn)HttpGet請(qǐng)求傳body參數(shù)
前言
最近調(diào)用公司項(xiàng)目一個(gè)接口時(shí),發(fā)現(xiàn)該接口是一個(gè)Get請(qǐng)求,入?yún)⒃贐ody 中(json格式)。場(chǎng)景如下:A服務(wù)需發(fā)送http請(qǐng)求調(diào)用B服務(wù)的接口(該接口為Get方式,入?yún)⑹且粋€(gè)json字符串在body中傳遞)
當(dāng)我看到這個(gè)接口的時(shí)候,感覺好奇怪(MMP,干嘛不用POST請(qǐng)求。Get就get,請(qǐng)求還放Body中,心里有些不爽)盡管心里不爽,但是也只能默默接受,擼起袖子 “干” 就完了!
實(shí)現(xiàn)過程
首先官方不推薦這樣做,但是http(基于tcp的超文本傳輸協(xié)議)并沒有規(guī)定,Get 請(qǐng)求不能加body
一.首先我寫了一個(gè)Get請(qǐng)求接口,本地測(cè)試一下,便于大家直觀的理解
調(diào)用成功:
本地使用postman調(diào)用是成功的,接下來我們使用Java代碼請(qǐng)求調(diào)用
二.使用Http工具類調(diào)用Get請(qǐng)求(json參數(shù))
1.引入httpclient 依賴
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.6</version> </dependency>
2.定義一個(gè)HttpGet實(shí)體類
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase; import java.net.URI; /** * @author xf * @version 1.0.0 * @ClassName HttpGetWithEntity * @Description TODO 定義一個(gè)帶body的GET請(qǐng)求 繼承 HttpEntityEnclosingRequestBase * @createTime 2020.11.18 13:51 */ public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase { private final static String METHOD_NAME = "GET"; ??????? @Override public String getMethod() { return METHOD_NAME; } public HttpGetWithEntity() { super(); } public HttpGetWithEntity(final URI uri) { super(); setURI(uri); } HttpGetWithEntity(final String uri) { super(); setURI(URI.create(uri)); } }
3.HttpGet請(qǐng)求公共方法
/** * 發(fā)送get請(qǐng)求,參數(shù)為json * @param url * @param param * @param encoding * @return * @throws Exception */ public static String sendJsonByGetReq(String url, String param, String encoding) throws Exception { String body = ""; //創(chuàng)建httpclient對(duì)象 CloseableHttpClient client = HttpClients.createDefault(); HttpGetWithEntity httpGetWithEntity = new HttpGetWithEntity(url); HttpEntity httpEntity = new StringEntity(param, ContentType.APPLICATION_JSON); httpGetWithEntity.setEntity(httpEntity); //執(zhí)行請(qǐng)求操作,并拿到結(jié)果(同步阻塞) CloseableHttpResponse response = client.execute(httpGetWithEntity); //獲取結(jié)果實(shí)體 HttpEntity entity = response.getEntity(); if (entity != null) { //按指定編碼轉(zhuǎn)換結(jié)果實(shí)體為String類型 body = EntityUtils.toString(entity, encoding); } //釋放鏈接 response.close(); return body; }
4.運(yùn)行服務(wù),本地測(cè)試調(diào)用一下該接口
/** * 測(cè)試 Get 請(qǐng)求 */ @Test public void test(){ String url = "http://127.0.0.1:8012/export/getByBodyJson"; Map<String, Object> map = new HashMap<>(); map.put("stuName","張一山"); map.put("school","北京戲劇學(xué)院"); String reqParams = JSONArray.toJSON(map).toString(); try { String s = sendJsonByGetReq(url, reqParams, "UTF-8"); System.out.println("請(qǐng)求Get請(qǐng)求返回結(jié)果:"+s); } catch (Exception e) { e.printStackTrace(); } }
三.使用HttpGet請(qǐng)求發(fā)送body入?yún)⒄{(diào)用成功
盡管這樣解決了get 加body 體傳參,但是仍建議大家使用post 加body!
到此這篇關(guān)于Java實(shí)現(xiàn)HttpGet請(qǐng)求傳body參數(shù)的文章就介紹到這了,更多相關(guān)Java HttpGet請(qǐng)求傳body參數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java Spring使用hutool的HttpRequest發(fā)送請(qǐng)求的幾種方式
- java中的常見幾種發(fā)送http請(qǐng)求實(shí)例
- java中調(diào)用https請(qǐng)求忽略ssl證書認(rèn)證代碼示例
- java?http請(qǐng)求獲取圖片并返回文件流給前端的方法步驟
- java實(shí)現(xiàn)調(diào)用http請(qǐng)求的五種常見方式
- Java中如何模擬HTTP請(qǐng)求并驗(yàn)證功能
- Java如何基于okhttp請(qǐng)求SSE接口流式返回詳解
- Java如何使用SSLContext請(qǐng)求https鏈接
- java的http請(qǐng)求工具對(duì)比分析
相關(guān)文章
深入探討Java超時(shí)自動(dòng)取消的實(shí)現(xiàn)方案
在復(fù)雜的分布式系統(tǒng)中,超時(shí)控制是保障系統(tǒng)穩(wěn)定性和可用性的關(guān)鍵機(jī)制,本文將深入探討Java中實(shí)現(xiàn)超時(shí)自動(dòng)取消的多種方案,希望對(duì)大家有所幫助2024-11-11Spring實(shí)現(xiàn)跨域的幾種方式小結(jié)
這篇文章主要給大家總結(jié)了幾種Spring實(shí)現(xiàn)跨域的方式,文中通過代碼示例介紹的非常詳細(xì),對(duì)我們的學(xué)習(xí)活工作有一定的幫助,需要的朋友可以參考下2023-07-07SpringMVC?@RequestMapping注解屬性詳細(xì)介紹
通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02SpringBoot數(shù)據(jù)校驗(yàn)功能的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot數(shù)據(jù)校驗(yàn)功能的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Spring Boot中Redis數(shù)據(jù)庫的使用實(shí)例
Spring Boot中除了對(duì)常用的關(guān)系型數(shù)據(jù)庫提供了優(yōu)秀的自動(dòng)化支持之外,對(duì)于很多NoSQL數(shù)據(jù)庫一樣提供了自動(dòng)化配置的支持。本篇文章主要介紹了Spring Boot中Redis的使用實(shí)例代碼,有興趣的開業(yè)了解一下。2017-04-04Java中Integer.valueOf,parsetInt() String.valueOf的區(qū)別和結(jié)果代碼解析
本文通過代碼給大家講解了JAVA中Integer.valueOf, parsetInt() String.valueOf的區(qū)別和結(jié)果,需要的朋友可以參考下2018-05-05基于JAVA代碼 獲取手機(jī)基本信息(本機(jī)號(hào)碼,SDK版本,系統(tǒng)版本,手機(jī)型號(hào))
本文給大家介紹基于java代碼獲取手機(jī)基本信息,包括獲取電話管理對(duì)象、獲取手機(jī)號(hào)碼、獲取手機(jī)型號(hào)、獲取SDK版本、獲取系統(tǒng)版本等相關(guān)信息,對(duì)本文感興趣的朋友一起學(xué)習(xí)吧2015-12-12