我是如何实现HttpGet请求传body参数的?

article/2025/10/7 2:12:47

点击关注公众号,利用碎片时间学习

前言

最近调用公司项目一个接口时,发现该接口是一个Get请求,入参在Body 中(json格式)。

场景如下:A服务需发送http请求调用B服务的接口(该接口为Get方式,入参是一个json字符串在body中传递)

当我看到这个接口的时候,感觉好奇怪(MMP,干嘛不用POST请求。Get就get,请求还放Body中,心里有些不爽)尽管心里不爽,但是也只能默默接受,撸起袖子 “干” 就完了!

实现过程

首先官方不推荐这样做,但是http(基于tcp的超文本传输协议)并没有规定,Get 请求不能加body

一、首先我写了一个Get请求接口,本地测试一下,便于大家直观的理解
e36efec56b20393c948b99ad83e90723.png

调用成功:

757383f0afbe80e55dec4fd6e8011e1b.png

本地使用postman调用是成功的,接下来我们使用Java代码请求调用

二.使用Http工具类调用Get请求(json参数)
  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>
  1. 定义一个HttpGet实体类

import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import java.net.URI;
/*** @author xf* @version 1.0.0* @ClassName HttpGetWithEntity* @Description TODO 定义一个带body的GET请求 继承 HttpEntityEnclosingRequestBase*/
public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase {private final static String METHOD_NAME = "GET";@Overridepublic 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));}}
  1. HttpGet请求公共方法

/*** 发送get请求,参数为json* @param url* @param param* @param encoding* @return* @throws Exception*/public static String sendJsonByGetReq(String url, String param, String encoding) throws Exception {String body = "";//创建httpclient对象CloseableHttpClient client = HttpClients.createDefault();HttpGetWithEntity httpGetWithEntity = new HttpGetWithEntity(url);HttpEntity httpEntity = new StringEntity(param, ContentType.APPLICATION_JSON);httpGetWithEntity.setEntity(httpEntity);//执行请求操作,并拿到结果(同步阻塞)CloseableHttpResponse response = client.execute(httpGetWithEntity);//获取结果实体HttpEntity entity = response.getEntity();if (entity != null) {//按指定编码转换结果实体为String类型body = EntityUtils.toString(entity, encoding);}//释放链接response.close();return body;}
  1. 运行服务,本地测试调用一下该接口

/*** 测试 Get 请求*/@Testpublic void test(){String url = "http://127.0.0.1:8012/export/getByBodyJson";Map<String, Object> map = new HashMap<>();map.put("stuName","张一山");map.put("school","北京戏剧学院");String reqParams = JSONArray.toJSON(map).toString();try {String s = sendJsonByGetReq(url, reqParams, "UTF-8");System.out.println("请求Get请求返回结果:"+s);} catch (Exception e) {e.printStackTrace();}}
三.使用HttpGet请求发送body入参调用成功
7ceb8d40f930973f434531142dbebb81.png

尽管这样解决了get 加body 体传参,但是仍建议大家使用post 加body!

来源:admins.blog.csdn.net/article/details/109809386

推荐:

最全的java面试题库

a8a7f643c3833e4fecb1308b11b999f3.png

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!


http://chatgpt.dhexx.cn/article/8UyFgQ6H.shtml

相关文章

HTTP get方式传json

文章目录 一、背景&#xff1f;二、尝试的过程1.postman(成功)2.hutool(失败)3.AsyncHttpClient(成功) 总结 一、背景&#xff1f; 最近项目中有个三方接口,需要使用get请求传递json, 这个让人有点懵,一般来说get参数都会直接拼接在url后, 复杂的参数都使用post方式传递, 尝试…

HTTP GET请求的最大长度?

HTTP GET请求的最大长度是多少&#xff1f; 是否定义了一个响应错误&#xff0c;如果服务器收到超过此长度的GET请求&#xff0c;服务器可以/应该返回该错误&#xff1f; 更新&#xff1a;如标记中所示&#xff0c;这是在Web服务API的上下文中&#xff0c;尽管也很有趣地看到了…

Arduino ESP32 获取网络数据(HTTP GET方式)

Arduino ESP32 获取网络数据(HTTP GET方式) 相关篇《Arduino ESP32 获取网络数据(HTTP POST方式)》《Arduino ESP32 获取网络数据(HTTP PATCH方式)》《Arduino ESP32 获取网络数据(HTTP PUT方式)》 本实例介绍&#xff0c;ESP32通过联网&#xff0c;访问指定服务器网站&#xf…

HTTP - get/post请求详解与本质区别总结

前言 在客户机和服务器之间进行请求、响应时&#xff0c;两种最常被用到的方法是&#xff1a;get和post。 get&#xff1a;从指定的资源请求数据&#xff08;从服务器获取数据&#xff09; post&#xff1a;向指定的资源提交要被处理的数据&#xff08;向服务器传送数据&#…

transferTo源码分析

transferTo源码分析 如图

netty(五) 【 transferTo 零拷贝实例】

前言&#xff1a; 在linux 中 transferTo 方法就可以完成传输&#xff0c;在 windows 中依次调用transferTo最多能传8M文件&#xff0c;需要分段传文件&#xff0c;而且要注意传输起点位置 模拟服务端实验源码&#xff1a; package com.dev.nio.TRANSFERTO;import java.io.IO…

MultipartFile的transferTo方法的坑

前言 最近用SpringBoot写文件上传功能&#xff0c;使用参数绑定之后确实是非常的方便了。但是&#xff0c;项目部署就出现了问题&#xff0c;搞得我一脸懵逼。后来&#xff0c;才发现是因为我使用了相对路径导致的&#xff0c;这个绝对是一个坑人的地方&#xff0c;不过也说明需…

通过零拷贝进行有效的数据传输(java、c)

目录 日期转移&#xff1a;传统方法 数据传输&#xff1a;零复制方法 构建文件服务器 性能比较 概要 相关阅读 许多Web应用程序提供大量的静态内容&#xff0c;这相当于从磁盘上读取数据并将完全相同的数据写回响应套接字。该活动似乎需要较少的CPU活动&#xff0c;但效率…

NIO中的零拷贝--transferTo

1、我们说零拷贝&#xff0c;是从操作系统的角度来说的。因为内核缓冲区之间&#xff0c;没有数据是 重复的&#xff08;只有 kernel buffer 有一份数据&#xff09;。 2、零拷贝不仅仅带来更少的数据复制&#xff0c;还能带来其他的性能优势&#xff0c;例如更少的上下 文切…

使用transferTo上传文件容器为jetty的问题

报错 springboot 内嵌的 tomcat替换jetty 9.4.44 后出现的问题。 jetty容器使用transferTo 上传问题会提示找不到文件。 ava.io.FileNotFoundException: C:\Users\XXX\AppData\Local\Temp\D:\workspace\1675246694267.xlsx(文件名、目录名或卷标语法不正确。) 跟进代码发现 是下…

Java很简单的文件上传(transferTo方式)

采用file.Transto 来保存上传的文件&#xff0c;代码简单&#xff0c;速度快. package com.springbootemaildemo.controller;import com.springbootemaildemo.entity.ResponseEntity; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import…

动态规划题目2

动态规划 跳跃游戏 VI (滑动窗口动态规划)丑数统计字典序元音字符串的数目最长重复子串分隔数组以得到最大和最低票价回文子串最长重复子数组最长回文子序列摆动序列旋转函数统计各位数字都不同的数字个数 (动规排列组合)最大整除子集猜数字大小 II超级丑数预测赢家栅栏涂色丑数…

动态规划专题精讲1

致前行的人&#xff1a; 要努力&#xff0c;但不要着急&#xff0c;繁花锦簇&#xff0c;硕果累累都需要过程&#xff01; 前言&#xff1a; 本篇文章为大家带来一种重要的算法题&#xff0c;就是动态规划类型相关的题目&#xff0c;动态规划类的题目在笔试和面试中是考察非常高…

Java实现动态规划经典题目

动态规划入门请看&#xff1a; DP动态规划专题&#xff08;一&#xff09;动态规划基本模型 前言 【说明】 关于动态规划的见解&#xff1a;动规和递归有很多相似的地方&#xff0c;最显著的特征可以说是阶段性&#xff0c;二者都有很明显的阶段划分&#xff0c;所以&#xf…

十一、动态规划题目相关

学习来源&#xff1a; 代码随香录&#xff1a;https://www.programmercarl.com/ labuladong算法&#xff1a;https://labuladong.github.io/algo/ 动态规划 动态规划五部曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历…

动态规划题目汇总

文章目录 序言题目一&#xff1a;古生物血缘远近判定题目二&#xff1a;迷宫I题目三&#xff1a;迷宫II题目四&#xff1a;出界的路径数题目五&#xff1a;最长公共字串题目六&#xff1a;最长递增子序列题目七&#xff1a;递增的三元子序列题目八&#xff1a;最长回文字串题目…

动态规划经典例题:不同路径

力扣上比较简答的一道动态规划题目。 方程&#xff1a; class Solution { public:int uniquePaths(int m, int n) {const int M m;const int N n;int dp[M][N];memset(dp, 0, sizeof(dp));for (int i 0; i < m; i) dp[i][0] 1;for (int i 0; i < n; i) dp[0][i] 1;…

动态规划算法与典型例题

目录 前言 一、动态规划要素&#xff08;条件&#xff09; 二、动态规划算法设计步骤 三、复杂度分析 四、典型例题1——游艇租聘 五、典型例题2——0-1背包问题 六、典型例题3——跳台阶问题 七、典型例题4——强盗抢劫问题 总结 前言 动态规划也是一种分治思想&…

动态规划问题经典例题

目录 前言一、字符串分割二、三角矩阵的最小路径和三、路径总数四、最小路径和五、背包问题六、 回文串分割七、编辑距离八、不同的子序列 前言 DP&#xff08;Dynamic Programming&#xff09;定义&#xff1a; 动态规划是分治思想的延伸&#xff0c;通俗一点来说就是大事化小…

动态规划经典题目总结

微信公众号 在算法中&#xff0c;动态规划题目算是比较经典的一类题目。在找工作中&#xff0c;不管是笔试&#xff0c;还是面试&#xff0c;我们经常会遇到用动态规划来解决问题的情况&#xff0c;有时候面试官还需要我们现场手写出动态规划解法的代码。因此&#xff0c;在求职…