(二)Java版接口自动化-使用springboot的RestTemplate请求HTTP的get,post


一、背景和介绍

    RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

HTTP请求方法:

(1)GET:通过请求URI得到资源
(2)POST:用于添加新的内容
(3)PUT:用于修改某个内容,若不存在则添加
(4)DELETE:删除某个内容

二、封装调用get,post请求接口

1、调用get接口

使用RestTemplate的exchange指定调用方式,GET 请求添加header头和 多个参数,封装

 /**
     * getForObject
     * @param url
     * @param map
     * @param token
     * @return
     * @throws Exception
     */
    public static String getForObject(String url, Map map, String token) throws Exception{
        RestTemplate restTemplate = new RestTemplate();
        //设置请求头的token
        HttpHeaders headers = new HttpHeaders();
        headers.set("token", token);
        HttpEntity request = new HttpEntity<>(headers);

        //参数拼接到URL上,生成get的链接
        StringBuffer stringBuffer = new StringBuffer(url);
        if (map instanceof Map) {
            Iterator iterator = ((Map) map).entrySet().iterator();
            if (iterator.hasNext()) {
                stringBuffer.append("?");
                Object element;
                while (iterator.hasNext()) {
                    element = iterator.next();
                    Map.Entry entry = (Map.Entry) element;
                    //过滤value为null,value为null时进行拼接字符串会变成 "null"字符串
                    if (entry.getValue() != null) {
                        stringBuffer.append(element).append("&");
                    }
                    url = stringBuffer.substring(0, stringBuffer.length() - 1);
                }
            }
        } else {
            throw new RuntimeException("url请求:" + url + "请求参数有误不是map类型");
        }
        //返回响应结果
        ResponseEntity response = restTemplate.exchange(url, HttpMethod.GET, request, String.class, map);
        System.out.println("打印response:" + response);
        return response.getBody();
    }

2、调用post接口

请求保护token,params

    /**
     *postForObject请求,入参包括:URL,map,token
     * @param url
     * @param map
     * @param token
     * @return
     */
    public static String postForObject(String url, Map map, String token) throws Exception{
        RestTemplate restTemplate = new RestTemplate();
        //设置请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        headers.set("token",token);//设置token,没有token去掉即可
        HttpEntity> request = new HttpEntity<>(map, headers);
        ResponseEntity response = restTemplate.postForEntity( url, request , String.class );
        return response.getBody();
    }

3、测试调用

package com.automation.interfacetest;

import com.automation.interfacetest.base.RestTemplateRequest;
import org.junit.jupiter.api.Test;

import java.util.HashMap;
import java.util.Map;


public class HttpRequestTest {
    String token = "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIzMzY4NzYwNTA4MTIyMzk4NzJBdGNlLVNGdk93LW5JVXBVd2RqTU43aEhTVUNoQmdmQW0ybzZQd1ZvUVVJTCIsImlhdCI6MTY0MTgwMDU0OCwic3ViIjoie1widXNlcklkXCI6XCIzMzY4NzYwNTA4MTIyMzk4NzJcIixcImFjY291bnRJZFwiOlwiMzM2ODc2MDUwODMzMjExMzkyXCIsXCJ1c2VyVHlwZVwiOjAsXCJhcHBDb2RlXCI6XCJIWEdZQVBQXCIsXCJjaGFubmVsQ29kZVwiOlwiUEFUSUVOVF9BTkRST0lEXCIsXCJkZXZpY2VudW1iZXJcIjpcIkF0Y2UtU0Z2T3ctbklVcFV3ZGpNTjdoSFNVQ2hCZ2ZBbTJvNlB3Vm9RVUlMXCIsXCJkZXZpY2VUeXBlXCI6XCJBUFBcIixcImFjY291bnROb1wiOlwiMTg2ODM1NzExMzFcIixcIm5hbWVcIjpudWxsLFwiZG9jdG9ySWRcIjpudWxsLFwib3JnYW5Db2RlXCI6bnVsbH0iLCJleHAiOjE2NDQzOTI1NDh9.stJ5I55clqbhIYzoIEMfmWyz5F4LWGUIfIY-ktFjcos***HXGYAPP";

    @Test
    public void rtPostForObject() throws Exception{
        String url = "https://hxgyapipre.cd120.info/cloud/hosplatcustomer/cardservice/cardlist";
        Map map= new HashMap<>();
        map.put("appCode", "HXGYAPP");
        map.put("organCode", "MS0101");
        map.put("channelCode", "PATIENT_ANDROID");
        map.put("guidance", "0");
        String result = RestTemplateRequest.postForObject(url, map, token);
        System.out.println("输出返回结果:" + result);
    }

    @Test
    public void rtGetForEntity() throws Exception{
        String url = "https://hxgyapipre.cd120.info/cloud/imagecloud/imageconfig/getimageconfig";
        Map map = new HashMap<>();
        map.put("hisCode", "SL0101");
        String result = RestTemplateRequest.getForObject(url, map, token);
        System.out.println("输出返回结果:" + result);
    }

}

参考文章:

https://www.javazhiyin.com/19714.html#comment-345

相关