SpringBoot系列(一)RestTemplate

作为springBoot的开篇系列,RestTemplate只能表示我只是个意外

what

RestTemplate是spring提供的用于访问rest服务的客户端(其实类似Apache的HttpClient,封装度更高一点)。默认是基于java.net包实现的,没有连接池的概念,也可以设置Apache的HttpClient作为作为实现。和RestTemplate功能相似的有Feign,不过Feign个人感觉有点为了封装而封装,有点多余。

Why

支持的常用的http方法

方法

作用

RestTemplate

GET

请求指定的页面信息,并返回实体主体

getForObject(String, Class, String...)

HEAD

只请求页面的首部

headForHeaders(String, String...)

POST

请求服务器接受所指定的文档作为对所标识的URI的新的从属实体

postForLocation(String, Object, String...)

PUT

从客户端向服务器传送的数据取代指定的文档的内容

put(String, Object, String...)

DELETE

请求服务器删除指定的页面

delete(String, String...)

OPTIONS

允许客户端查看服务器的性能

optionsForAllow(String, String...)

特性

线程安全

自定义回调操作

支持领域实体,可以直接将json转成javabean

支持URI模板

How

Maven配置

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>

    <artifactId>gs-consuming-rest</artifactId>

    <version>0.1.0</version>

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>1.5.2.RELEASE</version>

    </parent>

    <properties>

        <java.version>1.8</java.version>

    </properties>

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter</artifactId>

        </dependency>

        <dependency>

            <groupId>org.springframework</groupId>

            <artifactId>spring-web</artifactId>

        </dependency>

        <dependency>

            <groupId>com.fasterxml.jackson.core</groupId>

            <artifactId>jackson-databind</artifactId>

        </dependency>

    </dependencies>

    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

</project>

测试代码

 

普通java调用风格

RestTemplate restTemplate = new RestTemplate();

SimpleClientHttpRequestFactory requestFactory = (SimpleClientHttpRequestFactory) restTemplate.getRequestFactory();
//常用超时设置 requestFactory.setReadTimeout(6000); requestFactory.setConnectTimeout(6000); restTemplate.setRequestFactory(requestFactory); try{ String res = restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random",String.class); System.out.println("res ="+ res); }catch (RestClientException e){ e.printStackTrace(); }

Spring调用风格

生成RestTemplate实例,自动添加到spring容器中

@Configuration

public class RestTemplateTest {

    @Bean

    public RestTemplate getRestTemplate(){

        RestTemplate restTemplate = new RestTemplate();

        SimpleClientHttpRequestFactory requestFactory = (SimpleClientHttpRequestFactory) restTemplate.getRequestFactory();
//常用超时设置 requestFactory.setReadTimeout(6000); requestFactory.setConnectTimeout(6000); restTemplate.setRequestFactory(requestFactory); return restTemplate; } } //调用的地方自动装载RestTemplate实例 @Autowired RestTemplate restTemplate;
try{
String res = restTemplate.getForObject("http://gturnquist-quoters.cfapps.io/api/random",String.class);
System.out.println("res ="+ res);
}catch (RestClientException e){
e.printStackTrace();
}

uri模板

可以只替换参数,不改变uri结构

String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, "42", "21");
Map<String, String> vars = new HashMap<String, String>();
vars.put("hotel", "42");
vars.put("booking", "21");
String result = restTemplate.getForObject("http://example.com/hotels/{hotel}/bookings/{booking}", String.class, vars);

参考资料

//Spring官网对RestTemplate的介绍

https://spring.io/blog/2009/03/27/rest-in-spring-3-resttemplate/

//spring官网对RestTemplate的使用向导

https://spring.io/guides/gs/consuming-rest/

//应该是目前RestTemplate介绍比较多的博客

http://liuxing.info/2015/05/21/RestTemplate%E5%AE%9E%E8%B7%B5/

上一篇:c# ADO连接Access 执行Open后程序自动退出


下一篇:JVM学习二:垃圾收集(Garbage Collection,GC)机制