Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java中使用RestTemplate调用api

Java中使用RestTemplate调用api

作者头像
Vincent-yuan
发布于 2021-06-11 10:41:27
发布于 2021-06-11 10:41:27
1.7K00
代码可运行
举报
文章被收录于专栏:Vincent-yuanVincent-yuan
运行总次数:0
代码可运行

java中可以使用3种方式调用api

  • HttpURLConnection
  • HttpClient
  • RestTemplate

这里要讲的是RestTemplate的方式。

REST的基础知识

当谈论REST时,有一种常见的错误就是将其视为“基于URL的Web服务”——将REST作为另一 种类型的远程过程调用(remote procedure call,RPC)机制,就像SOAP一样,只不过是通过简单 的HTTP URL来触发,而不是使用SOAP大量的XML命名空间

恰好相反,REST与RPC几乎没有任何关系。RPC是面向服务的,并关注于行为和动作;而REST 是面向资源的,强调描述应用程序的事物和名词。

更简洁地讲,REST就是将资源的状态以最适合客户端或服务端的形式从服务器端转移到客户 端(或者反过来)。

在REST中,资源通过URL进行识别和定位。至于RESTful URL的结构并没有严格的规则,但是 URL应该能够识别资源,而不是简单的发一条命令到服务器上。再次强调,关注的核心是事 物,而不是行为.,

Spring 中如何使用Rest资源

借助 RestTemplate,Spring应用能够方便地使用REST资源 Spring的 RestTemplate访问使用了模版方法的设计模式.

模版方法将过程中与特定实现相关的部分委托给接口,而这个接口的不同实现定义了接口的不同行为.

RestTemplate定义了36个与REST资源交互的方法,其中的大多数都对应于HTTP的方法。 其实,这里面只有11个独立的方法,其中有十个有三种重载形式,而第十一个则重载了六次,这样一共形成了36个方法。

  • delete() 在特定的URL上对资源执行HTTP DELETE操作
  • exchange() 在URL上执行特定的HTTP方法,返回包含对象的ResponseEntity,这个对象是从响应体中映射得到的execute() 在URL上执行特定的HTTP方法,返回一个从响应体映射得到的对象
  • getForEntity() 发送一个HTTP GET请求,返回的ResponseEntity包含了响应体所映射成的对象
  • getForObject() 发送一个HTTP GET请求,返回的请求体将映射为一个对象
  • postForEntity() POST 数据到一个URL,返回包含一个对象的ResponseEntity,这个对象是从响应体中映射得到的
  • postForObject() POST 数据到一个URL,返回根据响应体匹配形成的对象
  • headForHeaders() 发送HTTP HEAD请求,返回包含特定资源URL的HTTP头
  • optionsForAllow() 发送HTTP OPTIONS请求,返回对特定URL的Allow头信息
  • postForLocation() POST 数据到一个URL,返回新创建资源的URL
  • put() PUT 资源到特定的URL

实际上,由于Post 操作的非幂等性,它几乎可以代替其他的CRUD操作.

Get请求

RestTemplate 的get方法有以上几个,可以分为两类: getForEntity() 和 getForObject()

首先看 getForEntity() 的返回值类型 ResponseEntity

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<T> ResponseEntity<T> getForEntity()

它继承了HttpEntity. 封装了返回的响应信息,包括 响应状态,响应头 和 响应体.

测试: getForEntity

  1. 无参数的 getForEntity 方法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 @RequestMapping("getForEntity")
    public List<UserEntity> getAll2() {
        ResponseEntity<List> responseEntity = restTemplate.getForEntity("http://localhost/getAll", List.class);
        HttpHeaders headers = responseEntity.getHeaders();
        HttpStatus statusCode = responseEntity.getStatusCode();
        int code = statusCode.value();

        List<UserEntity> list = responseEntity.getBody();

        System.out.println(list.toString());
        return list;

    }

  2.有参数的 getForEntity 请求,参数列表,可以使用 {} 进行url路径占位符

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//有参数的 getForEntity 请求,参数列表
    @RequestMapping("getForEntity/{id}")
    public UserEntity getById2(@PathVariable(name = "id") String id) {

        ResponseEntity<UserEntity> responseEntity = restTemplate.getForEntity("http://localhost/get/{id}", UserEntity.class, id);
        UserEntity userEntity = responseEntity.getBody();
        return userEntity;
    }

 3.有参数的 get 请求,使用map封装参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    //有参数的 get 请求,使用map封装参数
    @RequestMapping("getForEntity/{id}")
    public UserEntity getById4(@PathVariable(name = "id") String id) {
        HashMap<String, String> map = new HashMap<>();
        map.put("id",id);

        ResponseEntity<UserEntity> responseEntity = restTemplate.getForEntity("http://localhost/get/{id}", UserEntity.class, map);
        UserEntity userEntity = responseEntity.getBody();

        return userEntity;
    }

这里也可以用JSONObject。

而对于上传文件时,可以使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MultiValueMap<String, Object> resultMap = new LinkedMultiValueMap<>();
    Resource resource = new FileSystemResource(file);
    param.put("file", resource);

参考网址:

https://blog.csdn.net/itguangit/article/details/78825505

上传文件

https://blog.csdn.net/weixin_30539625/article/details/102054205

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
详解 RestTemplate 操作
作为开发人员,我们经常关注于构建伟大的软件来解决业务问题。数据只是软件完成工作时  要处理的原材料。但是如果你问一下业务人员,数据和软件谁更重要的话,他们很可能会选择  数据。数据是许多业务的生命之血。软件通常是可以替换的,但是多年积累的数据是永远不能  替换的。
业余草
2019/01/21
3K0
详解 RestTemplate 操作
Spring RestTemplate介绍
  上篇文件介绍Eureka服务的文章中,我们介绍到consumer从Eureka中通过LoadBalancerClient获取到服务端地址信息后通过RestTemplate来远程调用服务的场景,本文来具体介绍下RestTemplate的使用
用户4919348
2019/05/30
1.7K0
使用Spring RestTemplate访问Rest服务
  上面这段是RestTemplate类中的简单介绍,RestTemplate是Spring3.0后开始提供的用于访问 Rest 服务的轻量级客户端,相较于传统的HttpURLConnection、Apache HttpClient、OkHttp等框架,RestTemplate大大简化了发起HTTP请求以及处理响应的过程。本文关注RestTemplate是如何使用的,暂不涉及内部的实现原理。
happyJared
2018/09/20
1.6K0
使用Spring RestTemplate访问Rest服务
Spring RestTemplate中几种常见的请求方式
在Spring Cloud中服务的发现与消费一文中,当我们从服务消费端去调用服务提供者的服务的时候,使用了一个很好用的对象,叫做RestTemplate,当时我们只使用了RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能不可谓不强大,那么今天我们就来详细的看一下RestTemplate中几种常见请求方法的使用。---- ---- 本文主要从以下四个方面来
江南一点雨
2018/04/02
2.7K0
Spring RestTemplate中几种常见的请求方式
Spring RestTemplate中几种常见的请求方式
当我们从服务消费端去调用服务提供者的服务的时候,使用了一个很好用的对象,叫做RestTemplate,当时我们只使用了RestTemplate中最简单的一个功能getForEntity发起了一个get请求去调用服务端的数据,同时,我们还通过配置@LoadBalanced注解开启客户端负载均衡,RestTemplate的功能不可谓不强大,那么今天我们就来详细的看一下RestTemplate中几种常见请求方法的使用。
田维常
2019/07/16
3.4K0
Spring RestTemplate中几种常见的请求方式
RestTemplate的应用
Spring提供了一种简单便捷的模板类 RestTemplate 来调用 RESTful 接口。它提供了多种便捷访问HTTP服务的方法,能够大大提高客户端的编写效率。
砒霜拌辣椒
2023/08/23
2360
一文吃透接口调用神器RestTemplate
发送 http 请求,估计很多人用过 httpclient 和 okhttp,确实挺好用的,而 Spring web 中的 RestTemplate 和这俩的功能类似,也是用来发送 http 请求的,不过用法上面比前面的 2 位要容易很多。
路人甲Java
2021/11/08
10.3K0
一文吃透接口调用神器RestTemplate
精讲RestTemplate第3篇-GET请求使用方法详解
二者的主要区别在于,getForObject()返回值是HTTP协议的响应体。getForEntity()返回的是ResponseEntity,ResponseEntity是对HTTP响应的封装,除了包含响应体,还包含HTTP状态码、contentType、contentLength、Header等信息。
字母哥博客
2020/09/23
5.7K0
精讲RestTemplate第3篇-GET请求使用方法详解
【SpringBoot技术专题】「实战指南」从实战开发角度去分析操作RestTemplate的应用及使用技巧
当你的应用程序需要访问远程接口时,很容易被不同的浏览器和API调用协议弄晕。幸运的是,Spring框架已为我们提供了一个简单而功能强大的RestTemplate工具,它可以轻松地处理这些基础任务并提供一个简单的方式来访问各种API。
码界西柚
2023/04/13
1.7K0
【SpringBoot技术专题】「实战指南」从实战开发角度去分析操作RestTemplate的应用及使用技巧
RestTemplate 用法详解「建议收藏」
上篇文章带大家学习了一下基本的微服务环境搭建,由 provider 提供服务, consumer 通过 DiscoveryClient 先去 eureka 上获取 provider 的服务的地址,获取到地址之后再去调用相关的服务。在服务的调用过程中,使用到了一个工具,叫做 RestTemplate,RestTemplate 是由 Spring 提供的一个 HTTP 请求工具。在上文的案例中,开发者也可以不使用 RestTemplate ,使用 Java 自带的 HttpUrlConnection 或者经典的网络访问框架 HttpClient 也可以完成上文的案例,只是在 Spring 项目中,使用 RestTemplate 显然更方便一些。在传统的项目架构中,因为不涉及到服务之间的调用,大家对 RestTemplate 的使用可能比较少,因此,本文我们就先来带领大家来学习下 RestTemplate 的各种不同用法,只有掌握了这些用法,才能在微服务调用中随心所欲地发送请求。
全栈程序员站长
2022/11/01
3.6K0
springcloud笔记(一) Eurake和Ribbon,RestTemplate 的学习与测试案例
以上只是有两个项目,一个项目A 调用B项目,在A项目里面写死B项目的地址进行调用;
一写代码就开心
2022/05/09
5960
springcloud笔记(一) Eurake和Ribbon,RestTemplate 的学习与测试案例
使用 RestTemplate 进行第三方Rest服务调用
RestTemplate 是 Spring 提供的一个调用 Restful 服务的抽象层,它简化的同 Restful 服务的通信方式,隐藏了不必要的一些细节,让我们更加优雅地在应用中调用 Restful 服务 。但是在 Spring 5.0 以后RestTemplate处于维护模式,不再进行新特性的开发,仅仅进行一些日常维护。Spring 建议我们使用同时支持同步、异步和 Stream 的另一个 API —— WebClient 。但是在 Spring MVC 下目前我们还没有更好的选择。
码农小胖哥
2020/04/17
1.4K0
使用 RestTemplate 进行第三方Rest服务调用
SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」
问个问题:通过Java代码怎么发送Http请求,请求另一个Java程序的Controller方法呢?
鹿老师的Java笔记
2020/03/30
2.7K0
记录 RestTemplate 中的 GET 请求
Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率。它的堂兄:Http Client。(有了它,堂兄就用的少了)
子乾建建-Jeff
2020/06/29
2.2K0
记录 RestTemplate 中的 GET 请求
SpringBoot图文教程17—上手就会 RestTemplate 使用指南「Get Post」「设置请求头」
问个问题:通过Java代码怎么发送Http请求,请求另一个Java程序的Controller方法呢?
鹿老师的Java笔记
2020/03/20
2.1K0
Spring3 RestTemplate
RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。
HLee
2021/04/25
3.2K0
Spring3 RestTemplate
重学springboot系列番外篇之RestTemplate
RestTemplate是执行HTTP请求的同步阻塞式的客户端,它在HTTP客户端库(例如JDK HttpURLConnection,Apache HttpComponents,okHttp等)基础封装了更加简单易用的模板方法API。也就是说RestTemplate是一个封装,底层的实现还是java应用开发中常用的一些HTTP客户端。但是相对于直接使用底层的HTTP客户端库,它的操作更加方便、快捷,能很大程度上提升我们的开发效率。
大忽悠爱学习
2021/12/15
4.6K0
重学springboot系列番外篇之RestTemplate
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
Java_老男孩
2019/12/02
11.4K1
总结:使用 RestTemplate 发送HTTP请求
一般发送HTTP请求是使用 Apache的HttpClient,它比较灵活。在 spring cloud 中往往提供的 REST 风格的服务。RestTemplate 提供了一种简单便捷的模板类来进行HTTP操作的方式。
张云飞Vir
2021/05/18
3K0
SpringMVC 与 REST.
    我敢打赌这并不是你第一次听到或读到REST这个词。当讨论REST时,有一种常见的错误就是将其视为“基于URL的Web服务”—— 将REST作为另一种类型的RPC机制,只不过是通过简单的HTTP URL来触发。恰好相反,REST 和 RPC 几乎没有任何关系。RPC 是面向服务的,并关注于行为和动作;而REST 是面向资源的,强调描述应用程序的事物和名词。
JMCui
2018/08/01
1.2K0
推荐阅读
相关推荐
详解 RestTemplate 操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验