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/

  • 相关阅读:
    etl接口测试总结
    LR controller 参数化
    Mysql导入导出命令
    mysql基本命令
    mysql用户管理(新增用户及权限管理)
    源码编译搭建LAMP
    【OpenGL】Shader实例分析(一)-Wave
    仿真树叶飘落效果的实现(精灵旋转、翻转、钟摆运动等综合运用)
    cocos2d-x游戏开发(十四)用shader使图片背景透明
    泰然发布了一系列 OpenGL3.0 的教程,推荐大家参考学习
  • 原文地址:https://www.cnblogs.com/ulysses-you/p/6890892.html
Copyright © 2011-2022 走看看