前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Spring之RestTemplate使用小结一

Spring之RestTemplate使用小结一

作者头像
一灰灰blog
发布于 2018-08-13 12:59:36
发布于 2018-08-13 12:59:36
6.5K0
举报
文章被收录于专栏:小灰灰小灰灰

Spring之RestTemplate使用小结

image.png
image.png

作为一个Java后端,需要通过HTTP请求其他的网络资源可以说是一个比较常见的case了;一般怎么做呢?

可能大部分的小伙伴直接捞起Apache的HttpClient开始做,或者用其他的一些知名的开源库如OkHttp, 当然原生的HttpURLConnection也是没问题的

本篇博文则主要关注点放在Sprig的生态下,利用RestTemplate来发起Http请求的使用姿势

<!-- more -->

I. RestTempalate 基本使用

0. 目标

在介绍如何使用RestTemplate之前,我们先抛出一些小目标,至少需要知道通过RestTemplate可以做些什么,以及我们要用它来干些什么

简单的给出了一下常见的问题如下

  • 普通的Get请求获取返回数据,怎么玩?
  • post提交表达的请求,如何处理
  • post请求中RequestBody的请求方式与普通的请求方式区别
  • https/http两种访问如何分别处理
  • 如何在请求中带上指定的Header
  • 有跨域的问题么?如果有怎么解决
  • 有登录验证的请求,该怎么办,怎样携带身份信息
  • 上传文件可以支持么
  • 对于需要代理才能访问的http资源,加代理的姿势是怎样的

上面的问题比较多,目测不是一篇博文可以弄完的,因此对这个拆解一下,本篇主要关注在RestTemplate的简单Get/Post请求的使用方式上

1. 基本接口

捞出源码,看一下其给出的一些常用接口,基本上可以分为下面几种

代码语言:txt
AI代码解释
复制
// get 请求
public <T> T getForObject();
public <T> ResponseEntity<T> getForEntity();

// head 请求
public HttpHeaders headForHeaders();

// post 请求
public URI postForLocation();
public <T> T postForObject();
public <T> ResponseEntity<T> postForEntity();

// put 请求
public void put();

// pathch 
public <T> T patchForObject

// delete
public void delete()

// options
public Set<HttpMethod> optionsForAllow

// exchange
public <T> ResponseEntity<T> exchange()

上面提供的几个接口,基本上就是Http提供的几种访问方式的对应,其中exchange却又不一样,后面细说

2. Get请求

从上面的接口命名上,可以看出可以使用的有两种方式 getForObjectgetForEntity,那么这两种有什么区别?

  • 从接口的签名上,可以看出一个是直接返回预期的对象,一个则是将对象包装到 ResponseEntity 封装类中
  • 如果只关心返回结果,那么直接用 GetForObject 即可
  • 如果除了返回的实体内容之外,还需要获取返回的header等信息,则可以使用 getForEntit
a. 创建Get接口

为了验证RestTemplate的使用姿势,当然得先提供一个后端的REST服务,这了直接用了我个人的一个古诗词的后端接口,来作为简单的Get测试使用

请求连接: https://story.hhui.top/detail?id=666106231640

返回结果:

代码语言:txt
AI代码解释
复制
{
    "status": {
        "code": 200,
        "msg": "SUCCESS"
    },
    "result": {
        "id": 666106231640,
        "title": "西塞山二首(今谓之道士矶,即兴国军大冶县",
        "author": "王周",
        "content": "西塞名山立翠屏,浓岚横入半江青。\n千寻铁锁无由问,石壁空存道者形。\n匹妇顽然莫问因,匹夫何去望千春。\n翻思岵屺传诗什,举世曾无化石人。",
        "explain": "",
        "theme": "无",
        "dynasty": "唐诗"
    }
}
b. getForObject方式

首先看下完整的接口签名

代码语言:txt
AI代码解释
复制
@Nullable
public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables) throws RestClientException ;

@Nullable
public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException ;

@Nullable
public <T> T getForObject(URI url, Class<T> responseType) throws RestClientException;

有三个重载的方法,从接口上也比较容易看出如何使用,其中有点疑惑的则是第一钟,参数应该怎么传了,下面给出上面几种的使用姿势

代码语言:txt
AI代码解释
复制
public class RestTestmplateTest {
    private RestTemplate restTemplate;

    @Before
    public void init() {
        restTemplate = new RestTemplate();
    }

    @lombok.Data
    static class InnerRes {
        private Status status;
        private Data result;
    }

    @lombok.Data
    static class Status {
        int code;
        String msg;
    }

    @lombok.Data
    static class Data {
        long id;
        String theme;
        String title;
        String dynasty;
        String explain;
        String content;
        String author;
    }

    @Test
    public void testGet() {
        // 使用方法一,不带参数
        String url = "https://story.hhui.top/detail?id=666106231640";
        InnerRes res = restTemplate.getForObject(url, InnerRes.class);
        System.out.println(res);


        // 使用方法一,传参替换
        url = "https://story.hhui.top/detail?id={?}";
        res = restTemplate.getForObject(url, InnerRes.class, "666106231640");
        System.out.println(res);

        // 使用方法二,map传参
        url = "https://story.hhui.top/detail?id={id}";
        Map<String, Object> params = new HashMap<>();
        params.put("id", 666106231640L);
        res = restTemplate.getForObject(url, InnerRes.class, params);
        System.out.println(res);

        // 使用方法三,URI访问
        URI uri = URI.create("https://story.hhui.top/detail?id=666106231640");
        res = restTemplate.getForObject(uri, InnerRes.class);
        System.out.println(res);
    }
}

看上面的testcase,后面两个方法的使用没什么好说的,主要看一下org.springframework.web.client.RestTemplate#getForObject(java.lang.String, java.lang.Class<T>, java.lang.Object...) 的使用姿势

  • 根据实际传参替换url模板中的内容
  • 使用方法一时,模板中使用 {?} 来代表坑位,根据实际的传参顺序来填充
  • 使用方法二时,模板中使用 {xx}, 而这个xx,对应的就是map中的key

上面执行后的截图如下

3AD423F4F3C673F2D366772612B4355A.jpg
3AD423F4F3C673F2D366772612B4355A.jpg
c. getForEntity方式

既然getForObject有三种使用方法,那么getForEntity理论上也应该有对应的三种方式

代码语言:txt
AI代码解释
复制
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables) throws RestClientException ;
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException;
public <T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType) throws RestClientException;

因为使用姿势和上面一致,因此只拿一个进行测试

代码语言:txt
AI代码解释
复制
@Test
public void testGetForEntity() {
    String url = "https://story.hhui.top/detail?id=666106231640";
    ResponseEntity<InnerRes> res = restTemplate.getForEntity(url, InnerRes.class);
    System.out.println(res);
}

对这个,我们主要关注的就是ResponseEntity封装中,多了哪些东西,截图如下

C2D317A154B33CF76F6DB438D1589754.jpg
C2D317A154B33CF76F6DB438D1589754.jpg

从上面可以看出,多了两个东西

  • 一个返回的http状态码,如200表示请求成功,500服务器错误,404not found等
  • 一个 ResponseHeader

3. Post请求

从上面的接口说明上看,post请求除了有forObject 和 forEntity之外,还多了个forLocation;其次post与get一个明显的区别就是传参的姿势问题,get的参数一般会待在url上;post的则更常见的是通过表单的方式提交

因此接下来关注的重点在于forLocation是什么,以及如何传参

a. post接口mock

首先创建一个简单的提供POST请求的REST服务,基于Spring-boot简单搭建一个,如下

代码语言:txt
AI代码解释
复制
@ResponseBody
@RequestMapping(path = "post", method = {RequestMethod.GET, RequestMethod.OPTIONS, RequestMethod.POST})
public String post(HttpServletRequest request,
        @RequestParam(value = "email", required = false) String email,
        @RequestParam(value = "nick", required = false) String nick) {
   Map<String, Object> map = new HashMap<>();
   map.put("code", "200");
   map.put("result", "add " + email + " # " + nick + " success!");
   return JSON.toJSONString(map);
}
b. postForObject方法

首先看一下接口签名

代码语言:txt
AI代码解释
复制
public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables) throws RestClientException ;

public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException;

public <T> T postForObject(URI url, @Nullable Object request, Class<T> responseType) throws RestClientException ;

上面的三个方法,看起来和前面并没有太大的区别,只是多了一个request参数,那么具体的使用如何呢?

下面分别给出使用用例

代码语言:txt
AI代码解释
复制
@Test
public void testPost() {
    String url = "http://localhost:8080/post";
    String email = "test@hhui.top";
    String nick = "一灰灰Blog";

    MultiValueMap<String, String> request = new LinkedMultiValueMap<>();
    request.add("email", email);
    request.add("nick", nick);

    // 使用方法三
    URI uri = URI.create(url);
    String ans = restTemplate.postForObject(uri, request, String.class);
    System.out.println(ans);

    // 使用方法一
    ans = restTemplate.postForObject(url, request, String.class);
    System.out.println(ans);

    // 使用方法一,但是结合表单参数和uri参数的方式,其中uri参数的填充和get请求一致
    request.clear();
    request.add("email", email);
    ans = restTemplate.postForObject(url + "?nick={?}", request, String.class, nick);
    System.out.println(ans);


    // 使用方法二
    Map<String, String> params = new HashMap<>();
    params.put("nick", nick);
    ans = restTemplate.postForObject(url + "?nick={nick}", request, String.class, params);
    System.out.println(ans);
}

上面分别给出了三种方法的调用方式,其中post传参区分为两种,一个是uri参数即拼接在url中的,还有一个就是表单参数

  • uri参数,使用姿势和get请求中一样,填充uri中模板坑位
  • 表单参数,由MultiValueMap封装,同样是kv结构
c. postForEntity

和前面的使用姿势一样,无非是多了一层包装而已,略过不讲

d. postForLocation

这个与前面有点区别,从接口定义上来说,主要是

POST 数据到一个URL,返回新创建资源的URL

同样提供了三个接口,分别如下,需要注意的是返回结果,为URI对象,即网络资源

代码语言:txt
AI代码解释
复制
public URI postForLocation(String url, @Nullable Object request, Object... uriVariables)
		throws RestClientException ;

public URI postForLocation(String url, @Nullable Object request, Map<String, ?> uriVariables)
		throws RestClientException ;

public URI postForLocation(URI url, @Nullable Object request) throws RestClientException ;

那么什么样的接口适合用这种访问姿势呢?

想一下我们一般登录or注册都是post请求,而这些操作完成之后呢?大部分都是跳转到别的页面去了,这种场景下,就可以使用 postForLocation 了,提交数据,并获取返回的URI,一个测试如下

首先mock一个后端接口

代码语言:txt
AI代码解释
复制
@ResponseBody
@RequestMapping(path = "success")
public String loginSuccess(String email, String nick) {
    return "welcome " + nick;
}

@RequestMapping(path = "post", method = {RequestMethod.GET, RequestMethod.OPTIONS, RequestMethod.POST})
public String post(HttpServletRequest request, @RequestParam(value = "email", required = false) String email,
        @RequestParam(value = "nick", required = false) String nick) {
    return "redirect:/success?email=" + email + "&nick=" + nick + "&status=success";
}

访问的测试用例,基本上和前面的一样,没有什么特别值得一说的

代码语言:txt
AI代码解释
复制
@Test
public void testPostLocation() {
    String url = "http://localhost:8080/post";
    String email = "test@hhui.top";
    String nick = "一灰灰Blog";

    MultiValueMap<String, String> request = new LinkedMultiValueMap<>();
    request.add("email", email);
    request.add("nick", nick);

    // 使用方法三
    URI uri = restTemplate.postForLocation(url, request);
    System.out.println(uri);
}

执行结果如下

C4272685267804B4A1C1837EAEB76762.jpg
C4272685267804B4A1C1837EAEB76762.jpg

获取到的就是302跳转后端url,细心的朋友可能看到上面中文乱码的问题,如何解决呢?

一个简单的解决方案就是url编码一下

代码语言:txt
AI代码解释
复制
@RequestMapping(path = "post", method = {RequestMethod.GET, RequestMethod.OPTIONS, RequestMethod.POST},
            produces = "charset/utf8")
public String post(HttpServletRequest request, @RequestParam(value = "email", required = false) String email,
        @RequestParam(value = "nick", required = false) String nick) throws UnsupportedEncodingException {
    return "redirect:/success?email=" + email + "&nick=" + URLEncoder.encode(nick, "UTF-8") + "&status=success";
}

II. 小结

上面目前只给出了Get/Post两种请求方式的基本使用方式,并没有涉及到更高级的如添加请求头,添加证书,设置代理等,高级的使用篇等待下一篇出炉,下面小结一下上面的使用姿势

1. Get请求

get请求中,参数一般都是带在url上,对于参数的填充,有两种方式,思路一致都是根据实际的参数来填充url中的占位符的内容;根据返回结果,也有两种方式,一个是只关心返回对象,另一个则包含了返回headers信心

参数填充

  1. 形如 http://story.hhui.top?id={0} 的 url
  • 调用 getForObject(String url, Class<T> responseType, Object... uriVariables)
  • 模板中的0,表示 uriVariables 数组中的第0个, i,则表示第i个
  • 如果没有url参数,也推荐用这个方法,不传uriVariables即可
  1. 形如 http://story.hhui.top?id={id} 的 url
  • 调用 getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables)
  • map参数中的key,就是url参数中 {} 中的内容

其实还有一种传参方式,就是path参数,填充方式和上面一样,并没有什么特殊的玩法,上面没有特别列出

返回结果

  1. 直接获取返回的数据 getForObject
  2. 获取待responseHeader的数据 getForEntity

2. Post请求

  • post请求的返回也有两种,和上面一样
  • post请求,参数可以区分为表单提交和url参数,其中url参数和前面的逻辑一致
  • post表单参数,请包装在 MultiValueMap 中,作为第二个参数 Request 来提交
  • post的方法,还有一个 postForLocation,返回的是一个URI对象,即适用于返回网络资源的请求方式

3. 其他

最前面提了多点关于网络请求的常见case,但是上面的介绍,明显只处于基础篇,我们还需要关注的有

  • 如何设置请求头?
  • 身份验证的请求,如何携带身份信息?
  • 代理的设置
  • 文件上传可以怎么做?
  • post提交json串(即RequestBody) 又可以怎么处理

上面可能还停留在应用篇,对于源码和实现有兴趣的话,问题也就来了

  • RestTemplaet的实现原理是怎样的
  • 前面url参数的填充逻辑实现是否优雅
  • 返回的对象如何解析
  • ....

小小的一个工具类,其实东西还挺多的,接下来的小目标,就是针对上面提出的点,逐一进行研究

III. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

小灰灰Blog&公众号

QrCode
QrCode

知识星球

zhishi
zhishi

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SpringBoot 调用外部接口的三种方式
SpringBoot不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求, 比如在apaas开发过程中需要封装接口在接口中调用apaas提供的接口(像发起流程接口submit等等)下面也是提供了三种方式(不使用dubbo的方式)供我们选择
闻说社
2024/08/05
1770
SpringBoot 调用外部接口的三种方式
手把手讲解Spring中的Http请求神器RestTemplate
Java 中关于 Http 请求的工具实际上非常多,自带的 HttpUrlConnection,古老的 HttpClient,后起之秀 OkHttp 等,除了这些之外,还有一个好用的工具--RestTemplate,这是 Spring 中就开始提供的 Http 请求工具,不过很多小伙伴们可能是因为 Spring Cloud 才听说它。今天我们就来聊一聊这个 RestTemplate。
江南一点雨
2020/02/21
2.7K0
手把手讲解Spring中的Http请求神器RestTemplate
真不是我吹,Spring里这款牛逼的网络工具库我估计你都没用过!
传统情况下,在服务端代码里访问 http 服务时,我们一般会使用 JDK 的 HttpURLConnection 或者 Apache 的 HttpClient,不过这种方法使用起来太过繁琐,而且 api 使用起来非常的复杂,还得操心资源回收。
Java极客技术
2022/12/04
1.4K0
真不是我吹,Spring里这款牛逼的网络工具库我估计你都没用过!
springcloud3-服务到服务调用ribbon及openfeign
1,课程回顾 2,本章重点 ribbon (负载均衡器)如何实现服务到服务的调用 feign 服务到服务的调用 3,具体内容 3.1 ribbon 3.1.1 概念 Ribbon是一种客户端负载平衡器,可让您对HTTP和TCP客户端的行为进行大量控制(借助spring封装类RestTemplate,所有的入参,请求URL及出参数都是自己配置)。Feign已使用Ribbon,因此,如果使用@FeignClient,则本节也适用。 Ribbon中的中心概念是指定客户的概念。每个负载均衡器都是组件的一部分,这些组件可以一起工作以按需联系远程服务器,并且该组件具有您作为应用程序开发人员提供的名称(指定远程调用的服务名称,例如,使用@FeignClient批注)。根据需要,Spring Cloud通过使RibbonClientConfiguration为每个命名的客户端创建一个新的集合作为ApplicationContext。其中包含ILoadBalancer,RestClient和ServerListFilter。
用户9184480
2024/12/13
1160
springcloud3-服务到服务调用ribbon及openfeign
Spring-RestTemplate之urlencode参数解析异常全程分析
对接外部的一个接口时,发现一个鬼畜的问题,一直提示缺少某个参数,同样的url,通过curl命令访问ok,但是改成RestTemplate请求就不行;因为提供接口的是外部的,所以也无法从服务端着手定位问题,特此记录下这个问题的定位以及解决过程
一灰灰blog
2019/03/27
2.9K0
Spring-RestTemplate之urlencode参数解析异常全程分析
Spring Cloud Ribbon负载均衡
Spring Cloud Ribbon负载均衡一、简介二、客户端负载均衡三、RestTemplate详解GET请求POST请求PUT请求DELETE请求
cxuan
2019/06/03
6580
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
Java_老男孩
2019/12/02
11.4K1
SpringCloud客户端负载均衡器Ribbon
cheese
2023/10/25
3560
SpringCloud客户端负载均衡器Ribbon
Spring之RestTemplate中级使用篇
前面一篇介绍了如何使用RestTemplate发起post和get请求,然而也只能满足一些基本的场景,对于一些特殊的如需要设置请求头,添加认证信息等场景,却没有提及可以怎么做,这一篇则相当于进阶版,将主要介绍
一灰灰blog
2018/08/15
2.6K0
Spring之RestTemplate中级使用篇
【SpringBoot WEB 系列】AsyncRestTemplate 之异步非阻塞网络请求介绍篇
AsyncRestTemplate 发起异步网络请求,由 Spring4.0 引入,但是在 5.0 就被表上了删除注解,官方推荐使用基于 React 的 WebClient 来代替。
一灰灰blog
2020/07/07
6.2K0
【SpringBoot WEB 系列】AsyncRestTemplate 之异步非阻塞网络请求介绍篇
SpringBoot使用RestTemplate访问第三方接口
相信大家都知道如何在自己的项目里面调用自己的接口,只需要调用自己项目里面接口特定的URL地址就行了,但是如果是调用其他项目的接口呢,这时候如果是直接调用的话,很明显我们是不能够调用的.肯定是要通过某个工具才能够进行访问的.我们可以通过下面这张图来理解.
萌萌哒的瓤瓤
2021/01/13
3.8K0
SpringBoot使用RestTemplate访问第三方接口
RestTemplate的使用和原理你都烂熟于胸了吗?【享学Spring MVC】
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
YourBatman
2019/09/18
2.2K0
RestTemplate的使用和原理你都烂熟于胸了吗?【享学Spring MVC】
Spring RestTemplate中几种常见的请求方式
当我们从服务消费端去调用服务提供者的服务的时候,使用了一个很好用的对象,叫做RestTemplate,当时我们只使用了RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能不可谓不强大,那么今天我们就来详细的看一下RestTemplate中几种常见请求方法的使用。
田维常
2019/07/16
3.4K0
Spring RestTemplate中几种常见的请求方式
springBoot集成RestTemplate
文章目录 1. SpringBoot集成RestTemplate 1.1. 构造restful风格的api 1.2. 注入 1.3. 详解 1.3.1. GET(获取数据) 1.3.1.1. 生产 1.3.1.2. 消费 1.3.2. POST(新建、添加) 1.3.3. PUT(更新) 1.3.4. DELETE(删除) 1.4. 参考文章 SpringBoot集成RestTemplate 构造restful风格的api @RestController public class DepetContro
爱撒谎的男孩
2019/12/31
1K0
SpringBoot系列之RestTemplate使用示例
博主之前经常对接一些接口,所以发现写一些http请求比较麻烦,学习springboot的过程知道可以用RestTemplate来做http请求,RestTemplate是Spring Framework框架封装的基于模板方法设计模式的一个工具类,带有同步模板方法 API 的原始 Spring REST 客户端类,下面博主分析一些对接过程的一些经验,RestTemplate基本使用可以参考官网文档:https://docs.spring.io/spring-framework/docs/5.1.6.RELEASE/spring-framework-reference/integration.html#rest-client-access
SmileNicky
2022/05/07
1.4K0
SpringBoot系列之RestTemplate使用示例
RestTemplate学习
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
2019/08/29
9530
Spring RestTemplate中几种常见的请求方式
在Spring Cloud中服务的发现与消费一文中,当我们从服务消费端去调用服务提供者的服务的时候,使用了一个很好用的对象,叫做RestTemplate,当时我们只使用了RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能不可谓不强大,那么今天我们就来详细的看一下RestTemplate中几种常见请求方法的使用。---- ---- 本文主要从以下四个方面来
江南一点雨
2018/04/02
2.7K0
Spring RestTemplate中几种常见的请求方式
重学springboot系列番外篇之RestTemplate
RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。
大忽悠爱学习
2021/12/15
4.6K0
重学springboot系列番外篇之RestTemplate
一看就会的Spring的resetTemplate的使用方法
作为一名Java开发者,我们怎么都绕不开调用外部接口的场景,调用的方式要么是通过Http协议来调用,要么是通过RPC协议来调用,通过Http协议调用的话我们就需要用到Http的Api。比较常用的有Apache的HttpClient和原生的HttpURLConnection。这些Api都比较好用,但是我们今天要介绍一种更加好用API,Spring自带的RestTemplate,能力更强,使用更方便。
码农飞哥
2021/08/18
1.7K0
总结:使用 RestTemplate 发送HTTP请求
一般发送HTTP请求是使用 Apache的HttpClient,它比较灵活。在 spring cloud 中往往提供的 REST 风格的服务。RestTemplate 提供了一种简单便捷的模板类来进行HTTP操作的方式。
张云飞Vir
2021/05/18
2.9K0
推荐阅读
相关推荐
SpringBoot 调用外部接口的三种方式
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文