zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    jQuery tips
    WCF4.0进阶系列—第十一章 编写代码控制配置和通信 (上)
    WCF4.0进阶系列—第九章 事务支持(上)
    WCF4.0进阶系列第二章 寄宿WCF服务
    WCF4.0进阶系列第五章 在因特网环境下保护WCF服务
    [JavaScript] onkeypress and onchange event
    [JavaScript]使用jQuery定制开发自己的UI
    WCF4.0进阶系列第四章 保护企业内部的WCF服务
    WCF4.0进阶系列第六章 维护服务协定和数据协定
    WCF4.0 进阶系列第一章 WCF简介
  • 原文地址:https://www.cnblogs.com/ulysses-you/p/6890892.html
Copyright © 2011-2022 走看看