当前位置:首页 > 数码 > HTTP-和-WebClient把握-Spring-Boot-RestTemplate-外部接口调用-经过

HTTP-和-WebClient把握-Spring-Boot-RestTemplate-外部接口调用-经过

admin3个月前 (04-28)数码19

在SpringBoot中调用外部接口的形式有多种,其中最罕用的是经常使用RestTemplate或许WebClient。以下是一种经常使用RestTemplate的示例,蕴含了具体的形容和实例源代码:

步骤1:参与依赖

确保在pom.xml文件中参与以下依赖,以引入SpringBoot的Web模块:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

步骤2:创立RestTemplateBean

在SpringBoot运行程序的性能类中,创立一个RestTemplate的Bean,以便能够注入到其余组件中。

importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.client.RestTemplate;@ConfigurationpublicclassConfig{@BeanpublicRestTemplaterestTemplate(){returnnewRestTemplate();}}

步骤3:经常使用RestTemplate调用外部接口

创立一个Service或Controller类,并注入RestTemplate,经常使用它来调用外部接口。

importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Service;importorg.springframework.web.client.RestTemplate;@ServicepublicclassExternalApiService{privatefinalStringapiUrl="https://api.example.com/data";@AutowiredprivateRestTemplaterestTemplate;publicStringfetchDataFromExternalApi(){//动员GET恳求,并失掉照应Stringresponse=restTemplate.getForObject(apiUrl,String.class);//处置照应,可以进后退一步的业务逻辑处置returnresponse;}}

总结:

请留意,最近的Spring版本中介绍经常使用WebClient作为代替打算,由于它提供了更灵敏、照应式的形式来处置HTTP恳求。以下是一个繁难的经常使用WebClient的示例:

importorg.springframework.stereotype.Service;importorg.springframework.web.reactive.function.client.WebClient;@ServicepublicclassExternalApiService{privatefinalStringapiUrl="https://api.example.com/data";privatefinalWebClientwebClient;publicExternalApiService(WebClient.BuilderwebClientBuilder){this.webClient=webClientBuilder.baseUrl(apiUrl).build();}publicStringfetchDataFromExternalApi(){//动员GET恳求,并失掉照应Stringresponse=webClient.get().retrieve().bodyToMono(String.class).block();//处置照应,可以进后退一步的业务逻辑处置returnresponse;}}

上述示例中,咱们经常使用了WebClient.Builder来构建WebClient实例,而后经常使用链式调用动员GET恳求。这种形式愈加灵敏,并且支持照应式编程。选用经常使用RestTemplate还是WebClient取决于团体偏好和名目需求。


Springboot引用jackson-dataformat-xml后如何返回json

RestTemplate

引用jackson-dataformat-xml后,原本返回json的接口全部返回了xml,除了前端调用时因有加特定的请求头而可以返回json外,尤其是后端服务间调用时全部返回了xml,导致json反序列化失败。 让xml解析顺序重新排序 注意这里千万不能再加个@EnableWebMvc,会导致之前注入的Converter全部失效,参照 这里 然而这并不一直能解决问题,实际中发现有些接口能调整回来,有些不能,原因大概是用谷歌浏览器访问时,它的Accept如果没有指定,默认xml会排在前面申请;还有服务间的通信,由于之前没有指定还是返回了xml。 服务间通信是直接使用RestTemplate的,直接new,为了方便管理,改为注入一个写了Accept头的对象。 实现一个ClientHttpRequestInterceptor,便于加入Header配置 注入RestTemplate 顺便提一句,@ResqustMapping(produces=application/json) 也是可以的,然而太麻烦,反正前端在请求时会指定content-type,这个似乎会暗示返回结果,因此也能稳定返回json格式 我这边发现配置Media解析顺序用处不大,尤其是用谷歌浏览器时,它的Accept拿到就是xml排前面的,因此下面的设置没什么用

SpringCloud升级之路2020.0.x版-29.SC OpenFeign 的解析(2)

在使用云原生的很多微服务中,比较小规模的可能直接依靠云服务中的负载均衡器进行内部域名与服务映射,通过 健康 检查接口判断实例 健康 状态,然后直接使用 OpenFeign 生成对应域名的 Feign Client。Spring Cloud 生态中,对 OpenFeign 进行了封装,其中的 Feign Client 的各个组件,也是做了一定的定制化,可以实现在 OpenFeign Client 中集成服务发现与负载均衡。在此基础上,我们还结合了 Resilience4J 组件,实现了微服务实例级别的线程隔离,微服务方法级别的断路器以及重试。

我们先来分析下 Spring Cloud OpenFeign

Spring Cloud 中的任何组件,都是基于 Spring Boot 而实现的。由于 Spring Boot 中已经有了 HTTP 编码解码器,就可以不用单独给 OpenFeign 单独再实现 HTTP 编码解码器了,而是考虑将 OpenFeign 的编码解码器接口用 Spring Boot 的 HTTP 编码解码器实现。

在 FeignClientsConfiguration 中,提供了默认的实现:

通过源码可以看出,默认的 Decoder 是经过几层包装的 Decoder,分别包括:

传入 SpringDecoder 的 HttpMessageConverters 对象,是 spring-web 的所有 HttpMessageConverter 集合。HttpMessageConverter 是 spring-web 中对于 HTTP 请求和响应的 body 进行编码解码的工具。其接口结构是:

spring boot 内置了很多 HttpMessageConverter,我们也可以实现自己的 HttpMessageConverter,去实现我们自定义 MediaType,例如我们这里定义一个 :

之后,与前面类似,将其配置到 spring boot 兼容 MVC 配置中:

编写 Controller,测试:

使用 postman 类似的工具,指定 HTTP 请求头:

Body 是:

请求后,就会走到 CustomizedHttpMessageConverter 的 read 解析成 Student 对象,之后响应的 student 也会被 CustomizedHttpMessageConverter 的 write 写入响应 Body

由此可见, 由于 SpringEncoder 的存在,我们可以复用 Spring 内置的 HttpMessageConverter,同时也能扩展自定义我们自己的 HttpMessageConverter,非常方便 。

ResponseEntityDecoder 的代码比较简单,实现的效果就是解码的时候,忽略 HttpEntity 这个 spring-web 对于 HTTP 响应的包装类:

这个其实为了和 RestTemplate 的响应兼容,RestTemplate 可以返回 HttpEntity,但是底层 HTTP 请求返回的 body 其实并没有包装这个类型。

同理,JDK 中的 Optional 包装类,也需要做同样的事情,这个就是通过 OptionalDecoder 实现的。

SpringEncoder 编码器也非常简单,也是基于 spring 中的 HttpMessageConverter。这里我们就不再赘述。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: SpringBoot

“HTTP-和-WebClient把握-Spring-Boot-RestTemplate-外部接口调用-经过” 的相关文章

Spring-释放数据传输潜力的数据压缩技术-微服务 (springboot启动)

Spring-释放数据传输潜力的数据压缩技术-微服务 (springboot启动)

简介 随着云原生架构的兴起,微服务已成为可扩展和可维护系统的重要构建块。顾名思义,微服务是小型的、独立的服务,它们共同构成一个完整的系统。当使用微服务构建系统时,尤其是那些具有大量数据交换的系统...

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

SpringBeanDefinition元信息定义形式 BeanDefinition是一个蕴含Bean元数据的对象。它形容了如何创立Bean实例、Bean属性的值以及Bean之间的依赖相关。...

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

简介 Spring 事务传播性是指在 Spring 环境中,当多个包含事务的方法嵌套调用时,每个事务方法如何处理事务上下文中的提交或回滚行为。 传播性行为 Spring 中定义了 7 种事...

极致便当与卓越容错-Topic-Spring-重试-成功-运用-Kafka (极致餐是什么意思)

极致便当与卓越容错-Topic-Spring-重试-成功-运用-Kafka (极致餐是什么意思)

概述 Kafka的弱小性能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条信息的值。可以智能或手动参与该值。假设咱们因为失误而不可处置信息并想重试,咱们可以选用...

Security权限控制框架入门指南-Spring (security)

Security权限控制框架入门指南-Spring (security)

在罕用的后盾治理系统中,通常都会有访问权限控制的需求,用于限度不同人员关于接口的访问才干,假设用户不具有指定的权限,则不能访问某些接口。 本文将用waynboot-mall名目举例,给大家引...

Boot-Spring-与-3.0-加速应用性能的完美融合-GraalVM (bootstrap)

Boot-Spring-与-3.0-加速应用性能的完美融合-GraalVM (bootstrap)

在 2023 年,SpringBoot 3.0 的发布标志着 Spring 框架对 GraalVM 的全面支持。此支持对 Spring 技术栈来说是一项重大补充。 GraalVM 概述...

6-Spring-提供的四种弱小工具-远程接口调用神器 (6sp日常使用还能用多久)

6-Spring-提供的四种弱小工具-远程接口调用神器 (6sp日常使用还能用多久)

1.引见 Spring6是一个十分弱小的框架,它提供了许多工具和接口来简化远程接口调用。其中,WebClient、RestTemplate、HTTPInterface和RestClient是...

Spring-Boot-Starter原理详解-b-b (springernature)

Spring-Boot-Starter原理详解-b-b (springernature)

SpringBoot Starter 是一种包含了一组特定功能和依赖关系的依赖项,旨在为特定的应用程序场景提供快速集成和开箱即用的功能。主要用于将常用的功能模块打包成一个可重用的依赖项,开发者只需...