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);

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

posted @ 2022-02-22 20:18  站在巨人肩上的人  阅读(577)  评论(0编辑  收藏  举报