• RestTemplate基本使用


    在开发中,经常发送http请求。我们可以使用jdk自带的HttpConnection,也可以是工具等等。这里我介绍http工具工具中的一种——RestTemplate,这个SpringBoot自带的http工具类。因为经常使用springboot,微服务中也是使用这个工具!不想再去弄一堆http工具!所以记下来。

    一·、excute

    excute是方法RestTemplate的基础调用,后面的方法调用,也都是基于此种方式。

    此种方式最大的好处就是,直接读流,也许会觉得没什么用处。但是当请求是类似于返回一张二维码图片的时候,就会很好用!

     //     创建rest模板对象  
    		RestTemplate restTemplate = new RestTemplate();
    
            String url = "http://www.baidu.com";
    
    //        请求体定义
            RequestCallback requestCallback = client ->{
                client.getBody().write(  "请求体".getBytes()   );
                client.getHeaders().add("请求头");  
            };
    //        响应体的处理,提取
            ResponseExtractor responseExtractor = response -> {
                HttpStatus statusCode = response.getStatusCode();
                String statusText = response.getStatusText();
                System.out.println(statusCode.is2xxSuccessful());
                System.out.println(statusText);
    
    //        获取输入流,也就是响应的结果
                InputStream body = response.getBody();
                FileOutputStream fos = new FileOutputStream("./demo.txt");
                byte[] temp = new byte[1024];
                int tempInt = -1;
                while ((tempInt = body.read(temp,0,1024)) != -1){
                    fos.write(temp,0,tempInt);
                }
                return null;
            };
            restTemplate.execute(url, HttpMethod.GET,requestCallback,responseExtractor);
    

    二、exchange

            RestTemplate restTemplate = new RestTemplate();
    
            String url = "http://www.baidu.com";
    
    //        定义请求头,可以设置JSON还是表单
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
            RequestEntity<Void> build = RequestEntity.post(new URI(url)).headers(httpHeaders).build();
    
    //      发送http请求,这里String是返回值的类型,也可以是其他对应的POJO对象,如果不是对应的POJO的JSON字符串,会抛出异常。这里返回的是响应体,这个在第三节说。
            ResponseEntity<String> exchange = restTemplate.exchange(build, String.class);
            System.out.println(exchange.getBody());
    

    三、*ForEntity、*ForObject

    这里主要区分一下*ForEntity与*ForObject的区别,前者是返回Http实体,其中包含响应体及HTTP状态码等,而后者只返回响应体中的内容。

            RestTemplate restTemplate = new RestTemplate();
    
            String url = "http://www.baidu.com";
    
    
            /**
             * 添加到Header和请求体中,直接获取响应体中的数据,当接口为其他状态码的时候吗,会抛出404异常,所以还是用entity好,毕竟其他异常还是要自己处理。
             */
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.setContentType(MediaType.APPLICATION_JSON);
            RequestEntity<Void> build = RequestEntity.post(new URI(url)).headers(httpHeaders).build();
    
            String forEntity = restTemplate.postForObject(url,build, String.class);
            System.out.println(forEntity);
    

    ​ 其实我开始觉得写这个没什么必要,但是当我一直在找工具,发现每一种操作都不太习惯,我越来发现写一篇文章来记录下是多么重要!

  • 相关阅读:
    fedora 20 安裝 及 配置桌面環境
    2014上半年—Linux操作系统—嵌入式开发—中考
    【hdu 1864】最大报销额
    【hdu 1067】Gap
    【t055】成绩统计
    【b094&&z14】靶形数独
    【z06】观光公交
    【u213&&t037】修剪花卉
    【t062】最厉害的机器人
    【t075】郁闷的记者
  • 原文地址:https://www.cnblogs.com/theStone/p/15924800.html
Copyright © 2020-2023  润新知