spring boot2 (25)-RestTemplate客户端

RestTemplate使用说明 RestTemplate是Spring提供的用于访问http接口的客户端工具,它提供了多种便捷访问http服务的方法。在任意SpringBoot项目中,都有默认集成,不用引入任何多余的jar包。相比较传统的HttpClient、Okhttp以及java原生的URLConnection,有着极高的封装度,能够大大的提高对第三方http接口访问的编写效率。 配置RestTemplate RestTemplate工具提供两种装配方式。一种是RestTemplate类,一种是RestTemplateBuilde 阅读详情

关于rest可参考第3篇,而RestTemplate就是由spring提供的,用于在后台进行rest请求的,比繁琐的HttpClient要方便很多。

pom.xml

从本篇开始,后续文章都使用spring boot2,要求jdk版本至少8。之前的文章仍然适用于低版本的jdk,继续保留。spring boot 1和2大部分用法是一样的,只是有些功能做了细节调整。如默认连接池从tomcat变成了HikariCP,actuator有较大改动等。
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>

rest服务端

先创建一个服务端项目,项目中有一个接口方法提供服务,如下。端口为8081,启动项目

@RestController
public class HelloController {
	
	@RequestMapping("/server")
	public String server() {
		return "hello";
	}
}

rest客户端

创建客户端项目,在配置类中,使用RestTemplateBuilder来构建一个RestTemplate。

	@Autowired
	RestTemplateBuilder restTemplateBuilder;
	//在配置类中使用restTemplateBuilder构建RestTemplate实例
	@Bean
	public RestTemplate restTemplate(){
		return restTemplateBuilder.build();
	}

在控制层使用restTemplate来访问服务端,客户端端口为8080,启动项目

@RestController
public class ClientController {
	@Autowired
	RestTemplate restTemplate;
	
	@RequestMapping("/client")
	public String client() {
		//通过restTemplate请求rest服务端
		String result = restTemplate.getForObject("http://localhost:8081/server", String.class);
		return result;
	}

getForObject方法

getForObject指get请求,并返回一个Object对象。这里有2个方法参数

  • 第1个参数:请求的url地址
  • 第2个参数:返回的结果类型,这里String.class表示返回结果是一个字符串。

运行结果


如图,通过浏览器请求http://localhost:8080/client,客户端又通过restTemplate请求了服务端的数据hello,最终返回。

请求参数

  • 可以使用map来封装请求参数,并作为getForObject的第三个参数,同时修改url如下,map中的"1"会替换url中的{1},"2"会替换url中的{2}
		Map map = new HashMap();
		map.put("1", "hello");
		map.put("2", "world");
		String result = restTemplate.getForObject("http://localhost:8081/server?param1={1}&param2={2}", String.class,map);
  • 也可以直接将要传递的值放到getForObject方法的参数结尾,数量不限,它会按顺序替换{1}和{2}
String result = restTemplate.getForObject("http://localhost:8081/server?param1={1}&param2={2}", String.class, "hello", "world");

getForEntity方法

getForEntity和getForObject的用法是一样的,只是其返回结果是一个ResponseEntity,其中包含了更多的响应信息,比如:

		ResponseEntity response = restTemplate.getForEntity("http://localhost:8081/server",String.class);
		response.getHeaders();		//响应头
		response.getStatusCode();	//响应码
		response.getBody();			//响应体,即前面的result

postForObject方法

postForObject指post请求,并返回一个Object对象。

String response = restTemplate.postForObject("http://localhost:8081/server?param1={1}&param2={2}", null, String.class, "hello", "world");
  • postForObject第1个参数就是getForObject第1个参数。
  • postForObject第3个参数就是getForObject第2个参数。
  • postForObject第4个及以后的参数就是getForObject第3个及以后的参数。

postForObject除了第2个参数为null,其它地方用法和getForObject是一模一样的。但是post请求传参通常不是写在url上实现的,而是放在请求体中。此时,就需要使用第2个参数来传参,同时可省略第4个参数的url传参,如下

		Map map = new HashMap();
		map.put("param1", "hello");
		map.put("param2", "world");
		String response = restTemplate.postForObject("http://localhost:8081/server", map, String.class);
注意,服务端端接收不同参数时,语法也有所不同,如下
public String server(@RequestBody Map map,String param1,String param2)
  • @RequestBody Map map:此注解可用于接收请求体,即postForObject的第2个map参数。此注解第3篇有讲过。
  • String param1,String param2:用于接收postForObject第4个及以后参数的url传参 。

HttpEntity

postForObject的第2个参数其实是HttpEntity,这个类主要有三种构造方法,如下

  • new HttpEntity(请求体)
  • new HttpEntity(请求头)
  • new HttpEntity(请求体,请求头)
当我前面传了一个map参数时,系统内部会自动使用第一种方法,将这个map作为 请求体,并 封装成 HttpEntity。以下以第三种方法为例,介绍如何使用HttpEntity同时发送请求体和请求头:
		//请求体
		Map map = new HashMap();
		map.put("param1", "hello");
		map.put("param2", "world");
		//请求头
		MultiValueMap headers = new HttpHeaders();
		headers.add("Accept", "text/xml");
		//请求内容封装成httpEntity
		HttpEntity httpEntity= new HttpEntity(map,headers);
		
		restTemplate.postForObject("http://localhost:8081/server", httpEntity, String.class);

postForEntity

和getForEntity原理是一样的

配置超时

如果要设置请求的超时时间,可修改前面restTemplate的构建代码,如下

	@Bean
	public RestTemplate restTemplate(){
		RestTemplate restTemplate = restTemplateBuilder
			.setConnectTimeout(1000)		//连接超时为1秒
			.setReadTimeout(1000)			//请求超时为1秒
			.build();
		return restTemplate;
	}
Spring boot注入RestTemplate实例的2种方式 RestTemplate是我们使用的比较多的模板,用来发送http请求。大多数情况下,需要我们自己注入到Spring IOC容器。 对于低版本的spring boot,比如spring boot 1.3.7,是不支持RestTemplateBuilder创建RestTemplate实例的。 怎么办呢,如下: @Bean public RestTemplate restTemplate() { return new RestTemplate(); } 如果是spring boo... 阅读详情

相关推荐

Spring Boot 3.2:将 RestTemplate 替换为 RestClient

随着Spring WebFlux(一种异步、无阻塞的web框架)的出现,WebClient被引入作为RestTemplate的现代替代方案。WebClient采用反应式原理,非常适合构建反应式应用程序。它提供了对同步和异步通信的支持,以及用于编写请求的流畅的API。

weixin_39840884的博客 2192

RestTemplateBuilder配置RestTemplate

我仅仅宣布spring boot2的一个新的功能,开始用spring搭建REST 1、介绍 在这个简短的文章中,我们将要查看怎样配置一个spring RestTemplate bean。 让我们开始讨论3个主要的配置类型。 使用默认的RestTemplateBuilder 使用一个RestTemplateCustomizer 创建我们的RestTemplateBuilder 为了更容易...

hongfu951的专栏 1万+

Spring Boot 4弃用RestTemplate的原因与WebClient迁移指南

HTTP客户端是微服务架构中的核心组件,其性能直接影响系统吞吐量。传统阻塞式客户端如RestTemplate采用同步I/O模型,每个请求独占线程资源,这在并发场景下容易导致线程池耗尽。现代响应式编程通过事件驱动和非阻塞I/O提升资源利用率,Spring WebClient基于Project Reactor实现,支持背压和异步流处理。在电商、金融等高并发领域,响应式客户端能显著提升系统弹性,例如某案例显示WebClient的QPS处理能力是RestTemplate的6倍。Spring Boot 4弃用Rest

weixin_30254435的博客 392

RestTemplate

Spring提供的类似HttpClient的一个很不错的工具类~

weixin_62320071的博客 358

Spring Boot RestTemplate跳过SSL证书验证的三种实现方案与安全实践

SSL/TLS协议是保障网络通信安全的核心技术,通过非对称加密、数字证书和握手协议确保数据传输的机密性与完整性。其原理基于公钥基础设施(PKI),客户端验证服务器证书的合法性以防止中间人攻击。在微服务架构和系统集成中,HTTPS调用是常见需求,但开发测试环境常使用自签名证书,导致SSL握手失败。为解决这一痛点,开发者需定制HTTP客户端的SSL行为,通过配置SSLContext和HostnameVerifier实现临时信任。本文聚焦Spring Boot RestTemplate,对比Apache Http

weixin_30411819的博客 313

Spring Boot中的Web客户端与RestTemplate的使用:使用RestTemplate与WebClient发送HTTP请求及响应处理!

🏆本文收录于《滚雪球学Spring Boot》,专门攻坚指数提升,2025 年国内最系统+最强(更新中)。    本专栏致力打造最硬核 Spring Boot 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。

**My Coding Family** 1684

springboot用RestTemplateBuilder全局构造带自定义拦截的RestTemplate

springboot提供了RestTemplateBuilder(),可以定义一个configuration类,在其中定义一个bean,返回resttemplate,其他类中使用这个bean直接主句 它的build方法:构建一个新的 RestTemplate 实例并使用此构建器对其进行配置。返回:一个已配置的 RestTemplate 实例。 定义如下: ClientHttpRequestInterceptor :拦截给定的请求,并返回响应。给定的 ClientHttpRequestExecution 允许

qq_41358574的博客 1782

Spring Boot Introducing the RestTemplate

RestTemplate是Spring Framework提供的一个用于访问RESTful服务的客户端模板类,主要用来简化客户端调用HTTP请求的开发流程,并增加了一些特定于REST的功能特性。RestTemplate支持GET、POST、PUT、DELETE等HTTP方法,可以直接传入请求参数,也可以通过封装的实体对象发送请求。本文将对RestTemplate进行详细的介绍,并结合实例代码加以说明。

AI天才研究院 2577

62、SpringBoot 使用 RestTemplate 整合第三方 RESTful 服务

SpringBoot 使用RestTemplate 整合第三方 RESTful 服务

Java 领域技术分享 1281

JPA - @MappedSuperclass - 基类注解

目录前言代码示例 前言 @MappedSuperclass注解一般作为基类的注解,表眀该类是映射的超类,继承于它的子类实体在映射时会自动添加到子类实体的对应数据库表中,用于共同的属性代码复用和模型分离。 代码示例 BaseEntity.java import lombok.Getter; import lombok.Setter; import javax.persistence.MappedSuperclass; import java.util.Date; @Getter @Setter @Ma

Maggieq8324的博客 2066

DeepSeek研发的精算大模型「精卫」已实现98%精算任务覆盖,中国人寿采用后年节约3.2亿元技术采购成本,形成关键技术替代效应

根据现有资料,精算领域关键技术替代效应的行业标准定义尚未明确具体提及。然而,可以从相关文献中提取一些关键概念和方法来推导出可能的定义。​替代效应的基本定义​:替代效应是指一种商品价格变动引起另一种商品的相对价格变动,从而导致消费者在维持原有效用水平不变的条件下对商品需求量做出的调整。​技术替代效应​:在精算领域,技术替代效应可以理解为新技术或新方法对现有技术或方法的替代,从而影响精算模型、数据处理和决策过程。例如,机器学习在精算中的应用日益增长,改变了精算师的工作方式和模型构建方法。​。

百态·数智思维 | 聚焦大数据、量化与未来AI 1714

Spring Boot教程之十二: Spring – RestTemplate

要与 REST 交互,客户端需要创建客户端实例和请求对象、执行请求、解释响应、将响应映射到域对象以及处理异常。发送 HTTP GET 请求,返回包含从响应主体映射的对象的 ResponseEntity。将数据 POST 到 URL,返回包含从响应主体映射的对象的 ResponseEntity。对 URL 执行指定的 HTTP 方法,返回包含对象的 ResponseEntity。针对 URL 执行指定的 HTTP 方法,返回从响应主体映射的对象。发送 HTTP GET 请求,返回从响应主体映射的对象。

潜洋的专栏 2845

Vue3项目实战:用vue-print-nb搞定多页表格打印(附样式不丢失解决方案)

本文详细介绍了在Vue3项目中,如何利用vue-print-nb插件解决Element Plus多页表格打印的样式丢失与分页错乱等核心难题。通过分离打印视图、编写专用CSS控制分页行为、以及深入理解浏览器打印原理,提供了一套从基础配置到高级技巧的完整企业级打印解决方案,确保打印输出专业可靠。

linux的博客 1233

掌握 Spring Boot 中的 WebClient:何时以及为何使用它而不是 RestTemplate

WebClient 是一款功能强大、用途广泛且现代化的 Spring Boot 应用程序 HTTP 客户端,可帮助开发人员构建高效、反应灵敏且可扩展的系统。许多较旧的应用程序是在 WebClient 出现之前构建的,并且严重依赖 RestTemplate。则是现代、可扩展且反应灵敏的 Spring Boot 应用程序的首选。它提供了一种与 Web 服务交互的更有效方式,尤其是在需要高并发性和低延迟的场景中。仍然是许多 Spring Boot 应用程序中广泛使用的选项,尤其是在传统的同步架构中。

adminmail的博客 2905

Vscode远程免密连接Linux虚拟机,并配置C/C++运行环境

目前想要深入学习在Linux,也为了方便编写C/C++程序。Linux的环境里一般自带有c++的编译环境,如果没有安装gcc和g++等编译器也比较便利。但是在虚拟机里用vim编写C++程序又不得劲,因此打算使用vscode远程连接Linux虚拟机进行学习。为了防止自己以后还要再配置,重复踩坑,因此写下这篇博客用做记录。环境:windows11、VMware17、rocky linux9.1 ( 开源的CentOS9 )

m0_56779872的博客 8679

变焦跟踪理论基础(如何在变焦过程中保持清晰)

如何在整个变焦过程中一直保持图像的清晰度或焦点是变焦跟踪的主要挑战。 当用户在缩放跟踪的情况下改变缩放时,设备保持对焦。 然而,在没有变焦跟踪的情况下,图像变得失焦,图像在变焦跟踪后由于自动对焦(AF)算法才最终对焦。...................................................

ChenYX的博客 20万+

使用RestTemplate消费spring boot的Restful服务

一、RestTemplate说明     RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。前面的博客中http://blog.csdn.net/liuchuanhong1/article/details/53537874,已经使用Jersey客户端来实现了消费spring

牛奋lch 5万+

DIY一个SM2262ENG 2TB Nvme固态硬盘,慧荣SM2262EN主控

网友订做的 材料: 慧荣科技的62en,2片1G 三星DDR4缓存,4颗PF29F04T2AOCTH1,8CE B17A。SM2262EN属于慧荣第二代PCIe SSD主控,支持PCIe G3×4通道和全新的NVMe 1.3规范、8个NAND通道设计,并提供完整固件设计,最大循序读取速度高达3.5GB/s,循序写入速度达3.0GB/s,随机读写则高达420K IOPS和420K IOPS。此外,还采用目前最先进的低功耗设计,无论是在待机还是在工作状态下,均展现超低功耗,有效减少30%的功耗,满足用户追求超

m0_55207244的博客 1万+

RestTemplate的几种实现

RestTemplate是spring的一个rest客户端,在spring-web这个包下,spring boot的依赖如下 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;org.springframework.boot&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;s

坤哥的博客 4万+

SAP RAP 校验全流程:从 EML 读取到消息上屏与阻止落库

本文系统梳理了 SAP ABAP RAP 中的校验流程(The Validation Process),结合 Airline/Connection 案例,详细讲解了三类核心校验:语义键唯一性、外键有效性和字段间一致性。文章覆盖了 EML 的 READ ENTITIES 操作、reported-* 与 failed-* 结构的使用方法、消息创建与字段绑定技巧,以及处理草稿数据时的 UNION 查询策略。通过代码示例演示了如何实现校验逻辑、生成错误消息并阻止无效数据持久化,同时提供了常见问题的排查建议。全文注重

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 336

使用C++实现DNS欺骗攻击

其中,domain_name表示需要欺骗的域名,dns_server_ip表示实际DNS服务器的IP地址,fake_ip表示需要重定向到的IP地址。在DNS查询过程中,当客户端向DNS服务器请求解析某个域名时,DNS服务器会返回该域名对应的IP地址。DNS劫持是一种常见的网络攻击方式,通过篡改DNS响应数据,使得用户访问的网站被重定向到攻击者指定的恶意站点。我们使用C++编写一个简单的DNS欺骗程序,使得当客户端请求解析特定的域名时,我们可以将其重定向到指定的IP地址。使用C++实现DNS欺骗攻击。

TechGlide的博客 414

spring boot 工具类注入 restTemplate

前言: 在我们用springboot 开发项目的过程用,会有调用第三方http接口的情况,这时我们使用spring的RestTemplate,使用更方便。 1,我们可以自己看下RestTemplate源码,提供了好多请求格式,你可以自己选择使用。具体方法说明网上都有,常用的getForEntity,getForObject,postForObject,postForEntity,exchange...

360linker 3213

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring Boot中RestTemplate的使用

使用spring进行REST 1.SpringBoot 使用RestTemplateBuilder配置RestTemplate //首先,在springboot启动类中,或者配置类中进行配置 @Autowired RestTemplateBuilder restTemplateBuilider; @Bean public RestTemplate restTemplate() { //使用bui...

Pruett的博客 8667

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

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

玩转Spring Boot之RestTemplate的使用

1 RestTemplate简介 在java代码里想要进行restful web client服务,一般使用Apache的HttpClient。不过此种方法使用起来太过繁琐。Spring Boot提供了一种简单便捷的内置模板类来进行操作,这就是RestTemplate。 2 RestTemplate基本使用 2.1 依赖: Spring Boot的web starter已经内置了RestTemplate的Bean,我们主需要将它引入到我们的Spring Context中,再进行下简单的配置就可以直接使用了。

做兴趣使然的Hero 2106

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Spring Boot 开发RestTemplate使用

Spring Boot 开发RestTemplate使用

码海浮生,一个乐于分享的全栈工程师! 1450
上一篇: Java数据结构(6)-ArrayDeque
下一篇: spring boot2 (26)-hikari、多个数据源/mybatis/事务
free_java
博客等级 码龄10年 664粉丝 131原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值