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/

  • 相关阅读:
    Leetcode题目94.二叉树的中序遍历(中等)
    Leetcode题目79.单词搜索(回溯+DFS-中等)
    Leetcode题目78.子集(回溯-中等)
    Leetcode题目75.颜色分类(双指针-中等)
    Leetcode题目70.爬楼梯(动态规划+递归-简单)
    Leetcode题目64.最小路径和(动态规划-中等)
    Android 学习笔记之切换主题
    Android学习笔记:摇一摇功能的实现
    百思不得姐demo,只写了视频,图片,和段子,需要的童鞋进
    自己写的音乐播放器Demo开源给需要学习的人,大家编程路上一直进步,
  • 原文地址:https://www.cnblogs.com/ulysses-you/p/6890892.html
Copyright © 2011-2022 走看看