关于restTemplate的get和post请求,header设置及传参方式

RestTemplate使用总结,满足大部分的Get/Post+请求头header场景业务 RestTemplate完整GET/POST请求总结,包括带请求头header 阅读详情
AI摘要

本文详细介绍了如何在Spring项目中使用RestTemplate进行GET和POST请求,包括无参、带参、不同传参方式(URL参数、请求体JSON)以及设置Header。涵盖实例演示和自定义RequestFactory的使用。

1.restTemplate的引入

当前项目里对外暴露的接口基本都是一个rest的api,与其他项目对接时,通常也是调用对方暴露出来的rest api【http的接口】。这就涉及到要在自己项目里发送http请求。
调用http请求的方式:可以自己使用httpclient或者其他原生方式构建http请求。spring当然也提供了调用模板,那就是restTemplate。本文就是罗列restTemplate的调用及不同的传参方式。

spring中引入(引入就由spring托管了。直接@Autowired注解引用就行)
spring-config.xml配置文件中添加
<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"></bean>

springboot中引入
在启动类 XXXApp.java 中添加:
@Bean
public RestTemplate restTemplate(){
    return new RestTemplate();
}
使用时,@Autowired注解引入

get请求

@Autowired
private RestTemplate restTemplate

String url="https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=3ff9482454cb60bcb73f65c8c48d4209](https://restapi.amap.com/v3/weather/weatherInfo?city=110101&key=3ff9482454cb60bcb73f65c8c48d4209)";
//无参 不用指定header的请求
JSONObect jsonobject=restTemplate.getForObject(url,JSONObject.class);

//无参指定header的请求
        HttpHeaders headers = new HttpHeaders();
        headers.set("Accept", "application/json");
        HttpEntity<JSONObject> httpEntity = new HttpEntity<>( headers);
JSONObject jsonobject=restTemplate.getForObject(url,JSONObject.class,httpEntity);

//指定header 
HttpHeaders headers = new HttpHeaders();
headers.set("mdmAppId", mdmAppId);
headers.set("mdmToken", mdmToken);
log.info("tyccompstafflistUrl request headers {}",headers);
HttpEntity<JSONObject> httpEntity = new HttpEntity<>( headers);
ResponseEntity<JSONObject> exchange = restTemplate.exchange(tyccompbase, HttpMethod.GET, httpEntity, JSONObject.class);
JSONObject jsonObject = exchange.getBody();

//有参,param方式的参数【参数是拼接在url路径上】
Map<String, Object> params = new HashMap<>();
params.put("param1", "value1");
params.put("param2", "value2");
JSONObject jsonobject=restTemplate.getForObject(url,JSONObject.class,params);

//有参,请求体body中json【较少见,调用方式如下:】
因为restTemplate默认使用的jdk的requestfactory,这种方式不支持get请求这样的传参,故需要将restTemplate的requestfactory设置为自定义的requestfactory继承HttpEntityEnclosingRequestBase具体如下:
private static final class HttpComponentsClientHttpRequestWithBodyFactory extends HttpComponentsClientHttpRequestFactory {
        @Override
        protected HttpUriRequest createHttpUriRequest(HttpMethod httpMethod, URI uri) {
            if (httpMethod == HttpMethod.GET) {
                return new HttpGetRequestWithEntity(uri);
            }
            return super.createHttpUriRequest(httpMethod, uri);
        }
    }
    private static final class HttpGetRequestWithEntity extends HttpEntityEnclosingRequestBase {
        public HttpGetRequestWithEntity(final URI uri) {
            super.setURI(uri);
        }

        @Override
        public String getMethod() {
            return HttpMethod.GET.name();
        }
    }
此种方式下的调用
        String temp="";//参数的json串
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("Accept", "application/json");
        HttpEntity<JSONObject> httpEntity = new HttpEntity(temp, headers);
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestWithBodyFactory());//或者在注入之前set该requestfactory
        ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
        String body = exchange.getBody();

post请求

//有参  请求体【body体中】json参数
JSONObject params=new JSONObject();
params.put("param1","value1");
JSONObject jsonobject=restTemplate.postForTemplate(url,params,JSONObject.class);

//有参 请求体中json参数 设置header头
        JSONObject param = new JSONObject();
        param.put("param1","value1");
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("Accept", "application/json");
        HttpEntity httpEntity = new HttpEntity<>(param, headers);
//JSONObject jsonObject = restTemplate.postForObject(url, httpEntity, JSONObject.class);
        String jsonObject = restTemplate.postForObject(IDMServiceBaseUrl+"/sendSecurityCode", httpEntity, String.class);
        JSONObject bodyMap = JSONObject.parseObject(jsonObject);

以上是resttemplate根据不同传参方式发送http请求的使用实例~~~~

RestTemplate 如何设置默认的headers信息? 这个拦截器会在发送请求之前自动添加你指定的请求头。然后,你将这个拦截器添加到。实例发送的请求设置默认的请求头,而无需在每个请求中手动添加它们。实例,并将你刚才创建的拦截器添加到这个实例的拦截器列表中。实例发送请求时,都会自动包含你设置的默认请求头。设置默认的请求头,你通常需要自定义一个。这个请求头会自动被添加到每个请求中。以下是一个简单的示例,展示如何为。方法中,你可以添加或修改请求头。实例,指定了要添加的默认请求头。然后,我们将这个拦截器添加到。在这个例子中,我们创建了一个。现在,每当你使用这个。 阅读详情

相关推荐

Spring中使用RestTemplate发送Http请求

作为一个Java开发选手,平时调用外部服务都是通过PRC接口,而这次业务下游只提供Http接口,就有点捉急... RestTemplate的基本使用 RestTemplate是spring实现的,基于restful风格的http请求模板。使用RestTemplate可以简化请求操作的复杂性,同时规范了代码风格。 Get请求 // 将返回结果转换成POJO对象 public <T> T getForObject(String url, Class<T> responseTyp

SharingOfficer的博客 626

详解RestTemplate的Get请求Header设置

详解RestTemplate的Get请求Header设置

zzy7075的专栏 1万+

接口开发中的 RestTemplate 传参问题

RestTemplate 在使用RestTemplate时,通过map传参,遇到传不了参的问题 对于get请求,必须在请求的url中添加?a={a},参数为对应的map的key RestTemplate restTemplate = new RestTemplate(); String url = "https://restapi.amap.com/v3/weather/weatherInfo?key={key}&city={city}"; Map map = new HashMap.

1505

RestTemplate get请求,header设置及传参方式

前言一、RestTemplateSpring Boot RestTemplate使用get请求,请求头header的设置及传参方式1. 有参数,没有请求头 2. 有请求头,没参数 3. 有请求头,有参数代码如下:

涛哥是个大帅比 3万+

ANSYS HFSS 中的相控天线阵列仿真方法

相控天线阵列系统广泛使用,从国防雷达应用到商业 5G 应用。设计这些天线阵列涉及复杂的数学运算,需要全波仿真。Ansys HFSS 全场 3D 电磁仿真软件可以在合理的时间内以较低的计算成本仿真复杂的相控阵天线系统,同时考虑复杂激励、环境(即附近的天线)和平台对其性能的影响。本博客介绍了可用于有效仿真相控天线阵列的不同方法。以下是不同仿真方法的简要概述,视频链接中提供了完整的演示。ANSYS HFSS 提供 4 种不同的相控天线阵列仿真方法:1) 晶胞-无限阵列。

jkh920184196的博客 4251

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek,并借助DuckDuckGo实现联网查询

虎鲸不是鱼 1699

restTemplate的get post请求不同的header设置及传参方式

1.post 请求 //有参 请求体【body体中】json参数 JSONObject params=new JSONObject(); params.put("param1","value1"); JSONObject jsonobject=restTemplate.postForTemplate(url,params,JSONObject.class); //有参 请求体中json参数 设置header头 JSONObject param = new JSONObject();

weixin_44405111的博客 2512

基因家族扩张收缩分析可视化(CAFE5)

CafePlotter 是一个用于可视化 CAFE5 基因家族扩张收缩分析结果的 Python 工具

xuzhougeng blog 3637

请求体的方式传参_restTemplate的get post请求不同的header设置及传参方式

1.post 请求//有参 请求体【body体中】json参数JSONObject params=new JSONObject();params.put("param1","value1");JSONObject jsonobject=restTemplate.postForTemplate(url,params,JSONObject.class);//有参 请求体中json参数 设置heade...

weixin_36153937的博客 1174

YOLOv8改进 | Conv篇:基于FasterBlock与C2f结构的二次创新,参数量下降70万【附保姆级代码】

通过引入FasterBlock二次创新C2f结构,我们成功地对YOLOv8模型进行了优化,显著降低了其参数量,并提升了推理速度,而精度保持不变甚至有所提升。该模型在多个实际应用场景中展现出了优异的性能,尤其是在嵌入式设备、移动端和自动驾驶等领域,具有广泛的应用潜力。未来的研究将进一步优化模型结构,探索更多的应用场景,为目标检测技术的发展做出贡献。

一键难忘的博客 3214

Power EM与Signal EM解决办法与原理分析

1.面对power EM,首先检查missing via,补全via,还可以加宽,加密局部power mesh,一些power IO出pin有power EM问题,可以叠加多层线和垂直方向补power形成网络降低并联电阻和提供更多电流通路解决,这种方法还可以降低ir drop。3.先进工艺有一个via ladder的方法可以解决power/signal em问题,clock cell出pin绕线或者power rail连接power stripe通过搭梯子的方式连接,原理还是分流。

m0_61544122的博客 4743

java发送POST/GET/PUT/DELETE请求,header传参,body参数为json格式

1、maven引入 <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5</version></dependency>&...

weixin_30788239的博客 4376

零基础入门转录组数据可视化——绘制差异小提琴图(常规)

转录组数据可视化之一,先介绍相关基础知识,其次用实际案例为基础,由浅入深介绍差异小提琴图绘制的全过程,包括内容有相关代码和截屏。

呆猪儿的博客 635

Java http GET POST 请求传参

Java http GET POST 请求传参

weixin_38193704的博客 3741

Cadence OrCAD Capture CIS元器件管理时ERROR(ORCIS-6454): Temporary part number tracking is turned on报错的解决方法

使用Part manager对工程的元器件进行批量管理时,出现如下图所示的ERROR(ORCIS-6454): Temporary part number tracking is turned on报错其解决方法如下。

fydar的博客 3501

嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)

例如,在一个便携式设备中,U-Boot 在启动时初始化电源控制器,将输出电压设置为合适的值。命令是u-boot构建过程中用于配置u-boot选项的命令。在嵌入式系统中,启动画面(也称为启动Logo或Splash Screen)是展示给用户的第一印象,它可以包含公司的标志、产品的名称或其他相关信息。u-boot允许通过环境变量来进行配置,这使得开发者可以根据不同的硬件平台和项目需求灵活地调整u-boot的行为。写入操作可以是字节级别的,也可以是块级别的,具体取决于设备的性能和操作系统的需求。

大模型大数据攻城狮的专栏 997

Springboot微服务之间调用RestTemplate中几种常见的请求和传参数方式

Springboot微服务之间调用RestTemplate中几种常见的请求和传参数方式 get 第一种:getForEntity getForEntity方法的返回值是一个ResponseEntity,ResponseEntity是Spring对HTTP请求响应的封装,包括了几个重要的元素,如响应码、contentType、contentLength、响应消息体等。比如下面一个例子: @RequestMapping("/gethello") public String getHello() { Re

sunrj_niu的博客 2047

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

RestTemplate详解

目录 一、GET请求 二、POST请求 三、PUT请求 四、DELETE请求 五、处理请求和响应 headers 一、GET请求 在RestTemplate中,对GET请求可以通过两个方法进行调用实现 第一种:getForEntity(String url,Class responseType,Object ....urlvaribales);该方法提供三个参数 ur...

weixin_41429524的博客 971

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【spring boot】 使用 RestTemplate

略

sayyy的专栏 2601

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

RestTemplate (二) : RestOperations、具体API使用、RestTemplate原理介绍、使用案例

RestTemplate使用和原理: RestOperations、具体API使用、RestTemplate原理介绍、使用案例

Guizy 2880

Spring Cloud 学习笔记——详细介绍 RestTemplate

6.3 RestTemplate RestTemplate 是 Spring 3.0 之后支持 http 请求的一个工具,跟Spring Boot 无关,更跟 Spring Cloud 无关,提供了常见的 Rest 模板,如 GET、POST、PUT、DELETE,以及一些通用的 EXCHANG、EXCUTE方法。 RestTemplate 实现了 RestOperation 接口,并实现了其中的方法。RestOperation 接口定义了常见的 Restful 操作, 6.3.1 GET 在 pro

XiaoMing学习分享博文 1196

调用第三方接口,使用RestTemplate发送http请求

使用RestTemplate发送http请求

twtandhy的博客 678

RestTemplate

使用这三种方法调用post请求传递参数,当接口是表单接收参数的时候,Map不能定义为以下两种类型(url使用占位符进行参数传递时除外),HashMap是以请求体传递,MultiValueMap是表单传递!原文链接:https://blog.youkuaiyun.com/LDY1016/article/details/80002126。如果是get请求,又想要把参数封装到map里面进行传递的话,Map需要使用HashMap,且url需要使用占位符,如下。// 2、使用postForEntity请求接口。

weixin_59387768的博客 148
上一篇: 新导入的项目,出现java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter 错误
下一篇: Win10上RabbitMQ安装和启动详细步骤
皮皮虾的倔强
博客等级 码龄8年 425粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值