Spring中使用RestTemplate调用第三方接口API
来源:互联网 发布:河北工业大学网络 编辑:程序博客网 时间:2024/04/29 08:47
外部提供的API接口形式:
调用:http://192.xx.xx.xx:8080/xxxxxx/xxxx?idNo=xxxxx
返回:json字符串
需求:如何在程序中调用外部API接口获取程序所需的对象
解决方法:使用RestTemplate.exchange()方法
什么是RestTemplate?
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。
调用RestTemplate的默认构造函数,RestTemplate对象在底层通过使用java.net包下的实现创建HTTP 请求,可以通过使用ClientHttpRequestFactory指定不同的HTTP请求方式。
ClientHttpRequestFactory接口主要提供了两种实现方式
一种是SimpleClientHttpRequestFactory,使用J2SE提供的方式(既java.net包提供的方式)创建底层的Http请求连接。
一种方式是使用HttpComponentsClientHttpRequestFactory方式,底层使用HttpClient访问远程的Http服务,使用HttpClient可以配置连接池和证书等信息使用方法
1. pom.xml添加依赖
<!--调用外部网络API使用 start--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5</version> </dependency> <!--调用外部网络API使用 end--> <!--Rest请求start--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.8.8</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.8.8</version> </dependency> <!--rest请求end-->
2. 使用HttpClient连接池的方式 配置及依赖注入
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName" default-lazy-init="true"> <!--方式二、使用httpclient的实现,带连接池--> <bean id="ky.pollingConnectionManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager"> <!--整个连接池的并发--> <property name="maxTotal" value="1000"/> <!--每个主机的并发--> <property name="defaultMaxPerRoute" value="1000"/> </bean> <bean id="ky.httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder" factory-method="create"> <property name="connectionManager" ref="ky.pollingConnectionManager"/> <!--开启重试--> <property name="retryHandler"> <bean class="org.apache.http.impl.client.DefaultHttpRequestRetryHandler"> <constructor-arg value="2"/> <constructor-arg value="true"/> </bean> </property> <property name="defaultHeaders"> <list> <bean class="org.apache.http.message.BasicHeader"> <constructor-arg value="User-Agent"/> <constructor-arg value="Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.16 Safari/537.36"/> </bean> <bean class="org.apache.http.message.BasicHeader"> <constructor-arg value="Accept-Encoding"/> <constructor-arg value="gzip,deflate"/> </bean> <bean class="org.apache.http.message.BasicHeader"> <constructor-arg value="Accept-Language"/> <constructor-arg value="zh-CN"/> </bean> </list> </property> </bean> <bean id="ky.httpClient" factory-bean="ky.httpClientBuilder" factory-method="build"/> <bean id="ky.clientHttpRequestFactory" class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory"> <constructor-arg ref="ky.httpClient"/> <!--连接超时时间,毫秒--> <property name="connectTimeout" value="5000"/> <!--读写超时时间,毫秒--> <property name="readTimeout" value="10000"/> </bean> <bean id="restTemplate" class="org.springframework.web.client.RestTemplate"> <constructor-arg ref="ky.clientHttpRequestFactory"/> <property name="errorHandler"> <bean class="org.springframework.web.client.DefaultResponseErrorHandler"/> </property> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.FormHttpMessageConverter"/> <bean class="org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter"/> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> </list> </property> </bean> </list> </property> </bean> <bean id="baseRest" class="com.hfi.common.dao.BaseRest"> <property name="restTemplate" ref="restTemplate"/> <property name="restServer" value="{'xxxx':['http://192.xx.xx.xx:8080/xxxx']}"/> </bean></beans>
3. 定义实体类BaseRest,RestResponse
调用序列图
其中核心代码就是restTemplate.exchange()方法
以上,就在spring中使用RestTemplate调用第三方接口的API,将其json内容转换为程序中需要的对象
参考:RestTemplate实践 这篇文章仅仅看懂一点点阅读全文
0 0
- Spring中使用RestTemplate调用第三方接口API
- spring中 使用restTemplate访问rest接口
- 第三方快递接口API调用
- 使用restTemplate调用外部接口
- Spring中RestTemplate使用例子
- RestTemplate使用gzip压缩调用接口
- 使用spring RestTemplate进行rest接口测试
- 使用spring RestTemplate进行rest接口测试
- spring中利用RestTemplate调用REST资源
- spring rest mvc使用RestTemplate调用
- spring rest mvc使用RestTemplate调用
- RestTemplate远程接口调用
- 第三方平台API调用
- 前端第三方接口调用
- 调用第三方的接口
- 调用第三方接口总结
- 在spring MVC中使用RestTemplate
- Spring Boot中RestTemplate的使用
- MYSQL数据库 的 decimal 字段类型
- ios 删除按钮不显示
- Elasticsearch 版本控制
- 用外部表(ORACLE_DATAPUMP)导出数据到文件再导入实验
- iBatis配置文件讲解
- Spring中使用RestTemplate调用第三方接口API
- EXE和SYS通信(ReadFile WriteFile DO_DIRECT_IO) 直接方式
- 百度编辑器ueditor添加视频方法
- IO读写文本和图片
- Streaming Data Ingest介绍
- openwrt系统设置STA模式或AP模式
- 点击按钮弹出文本框
- c# socket 解决粘包,半包
- C++中使用JsonCpp