spring boot使用RestTemplate优雅的调用第三方Api

spring boot使用RestTemplate优雅的调用第三方Api

Laughing
2020-10-02 / 4 评论 / 1,912 阅读 / 搜一下 / 正在检测是否收录...

简述RestTemplate

是Spring用于同步client端的核心类,简化了与http服务的通信,并满足RestFul原则,程序代码可以给它提供URL,并提取结果。默认情况下,RestTemplate默认依赖jdk的HTTP连接工具。当然你也可以 通过setRequestFactory属性切换到不同的HTTP源,比如Apache HttpComponents、Netty和OkHttp。

借助 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

RestTemplate使用

这里以请求高德地图的geo接口为例进行说明

引入依赖

RestTemplate位于spring-boot-starter-web中,所以我们只需要引入spring-boot-starter-web依赖即可。

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

配置RestTemplate

我这里直接放到configuration配置类了,可以通过配置文件注入,有不了解的,可以戳 这里

/**
 * @author laughing
 * @date 2020/10/2
 * @site https://lisen.cc
 */
@Configuration
public class RestTemplateConfig {

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

    @Bean
    public ClientHttpRequestFactory clientHttpRequestFactory() {
        SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
        simpleClientHttpRequestFactory.setReadTimeout(3600);
        simpleClientHttpRequestFactory.setConnectTimeout(3600);
        return simpleClientHttpRequestFactory;
    }

}

调用高德geo接口

/**
 * @author laughing
 * @date 2020/10/2
 * @site https://lisen.cc
 */
@RestController
public class AmapController {

    private final String url = "https://restapi.amap.com/v3/geocode/geo";
    private final String key = "c17ba5b2f9277ed0326ab4fa6019b0cf";

    @Resource
    RestTemplate restTemplate;

    /**
     * 地理位置编码
     *
     * @return
     * @throws JsonProcessingException
     */
    @RequestMapping("geo")
    public String geo() throws JsonProcessingException {
        String url = this.url + "?key=" + this.key + "&address=" + "山东省济南市历下区龙奥大厦" + "&output=JSON";
        ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);
        return responseEntity.getBody();
    }

}
0

评论 (4)

取消
  1. 头像
    andyjiang
    Windows 10 · Google Chrome

    正在找这个呢

    回复
  2. 头像
    青云
    Windows 10 · Google Chrome

    感谢分享

    回复
  3. 头像
    zzl123123
    Windows 10 · Google Chrome

    大佬,这个资源找很久了,能不能发一下谢谢, 1606244844@qq.com

    回复
    1. 头像
      Laughing 作者
      MacOS · Google Chrome
      @ zzl123123

      代码都在Gitee上

      回复