热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringRestTemplate与WebClient

起因:在工作中经常需要使用java去调用其他网络资源,比如微信小程序、公众号开发的过程中需要的各种API。之前一直使用的是httpClient,后来在百度的时候偶然间发现了这个,惊为天人,学

起因:在工作中经常需要使用java去调用其他网络资源,比如微信小程序、公众号开发的过程中需要的各种API。之前一直使用的是httpClient,后来在百度的时候偶然间发现了这个,惊为天人,学习一下,并将他应用到日常的工作开发中,简化开发。

1.RestTemplate的来源

来到上海工作遇到的第一个项目是 单体项目,由一个外包团队开发完成。接手之后,将spring从3.x升级到4.x,ibatis还未升级,之后做一个ibatis升级mybatis的博客。

以下是RestTemplate的官方文档,文档中说明,在spring5.x之后逐渐的不再维护RestTemplate了,替代他的将是WebClient。

Spring RestTemplate 与 WebClient
RestTemplate .png

2.RestTemplate的初始化

先看一下他的构造函数,有无参构造与有参构造,如果我们使用的是无参构造,那么他默认使用的是HttpURLConnection,如果使用有参构造,必须要传入一个相应的工厂,才可以,这里也支持netty(挖个坑)以及HttpClient。

Spring RestTemplate 与 WebClient
构造函数

将RestTemplate运用到我们的项目中去,(初始化)

//第一种,直接创建
 RestTemplate rest = new RestTemplate();
//第二种,为了更好的去操作,以及之后的替换,我们可以将RestTemplate注册到我们的spring中,这样可以统一管理,如果想要换源, 也可以更好的操作。
@Configuration
public class RestConfig {

    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

3.使用RestTemplate进行网络访问

这里只对exchange方法进行介绍,get,post等方法的使用大同小异,且皆可用exchange方法进行代替,所以,也就少写一些。

请参考我的另一篇blog,(包含get,post,exchange)本篇已过时。

        //传参,必须是这个MultiValueMap-非requestBody传参
        MultiValueMap headers = new LinkedMultiValueMap();
        headers.add("Content-Type", "application/json");
        // requestBody传参 不能使用MultiValueMap 这个类型
        // HttpHeaders httpHeaders = new HttpHeaders();
        //  httpHeaders.setContentType(MediaType.APPLICATION_JSON);
        HttpEntity requestEntity = new HttpEntity(JSON.toJSON(webappTemplateMsg), headers);
        //无参构造,使用的是,HttpURLConnection
        RestTemplate rest = new RestTemplate();
        String url = "https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send";
        //exchange 使用的时候需要注意,请求使用HttpEntity 返回使用ResponseEntity
        ResponseEntity entity = rest.exchange(url, HttpMethod.POST, requestEntity, byte[].class, new Object[0]);

我这里返回的是流,所以使用的是byte[],方法如下:

Spring RestTemplate 与 WebClient
exchange方法

分别传入,url,请求方法,httpEntry,返回的类型R,这样就可以使用相应的ResponseEntity来接收了

以上就是 RestTemplate中我学到的东西,如果还有高级操作或坑,会继续更新。WebClient暂时还未用到,但之后肯定要学习和掌握的。


不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!


推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
author-avatar
神游一梦
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有