RestTemplate接口请求总结

最近做自动化测试,使用RestTemplate调用接口,碰到了各种场景下,什么都不带的,带cookie的,带header的,带参数的,需要获取返回状态码的,先在这稍微总结下,不定期更新

一、获取接口返回状态码

使用getForEntity调用接口,返回结果调用getStatusCode()方法取得HttpStatus对象,然后就可以调用里面的各种方法来满足你的需求了

//判断接口返回是否为200
    public static Boolean ping(){
        String url = domain + "/it/ping";
        try{
            ResponseEntity<String> responseEntity = template.getForEntity(url,String.class);
            HttpStatus status = responseEntity.getStatusCode();//获取返回状态
            return status.is2xxSuccessful();//判断状态码是否为2开头的
        }catch(Exception e){
            return false; //502 ,500是不能正常返回结果的,需要catch住,返回一个false
        }
    }

二、什么都不带,将参数拼接在请求url后面

将参数拼接在请求url后面,postForObject请求参数为null

public static void login(String userCode,String md5Password,int companyId,WebDriver driver){
        RestTemplate template = new RestTemplate();
        String url = "https://login.dooioo.net/api/autotest/userLogin";//请求地址
        String param ="?userCode=" + userCode + "&md5Password=" + md5Password + "&companyId=" + companyId;
        try{
                String  str = template.postForObject(url+param,null, String.class);//所得结果为调整成String类型
           }catch(Exception e){
                System.out.println("登录失败");
                e.printStackTrace();
            }
    }

三、带cookie,header,参数

带cookie实际也是将参数塞入header中:

1、定义header对象: HttpHeaders headers = new HttpHeaders()
2、将要的cookie塞入header:headers.put(HttpHeaders.COOKIE,cookieList)(注意cookie需要是一个list,内容为 name=value 例如:loginticket=sldjfas112sadfsd)
3、也可以在Header中塞入其他值:headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED)

/*
        获取浏览器的cookie,将其塞入header中
     */
    public static HttpHeaders getHeader(WebDriver driver){
        HttpHeaders headers = new HttpHeaders();
        Set<Cookie> cookies = driver.manage().getCookies();//获取浏览器cookies
        List<String> cookieList = new ArrayList<String>();
        for(Cookie cookie:cookies){ //将浏览器cookies放入list中
            //System.out.println("当前cookies为:" +  cookie.getDomain() + " " + cookie.getName() + ":" + cookie.getValue());
            cookieList.add(cookie.getName() + "=" + cookie.getValue());
        }
        //System.out.println("cookie为:" + cookieList.toString());
        headers.put(HttpHeaders.COOKIE,cookieList); //将cookie放入header
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //post表单 ,如果是个json则设置为MediaType.APPLICATION_JSON
        return headers;
    }
    
放入参数:

1、使用MultiValueMap用来放参数,(使用HashMap不行,具体原因可见http://www.cnblogs.com/shoren/p/RestTemplate-problem.html ),
2、根据header和参数实例化HttpEntity ,然后调用postForEntity方法调用接口

HttpEntity<MultiValueMap<String,String>> request = new HttpEntity<MultiValueMap<String,String>>(param,headers)

完整代码如下(使用方法可参考:https://segmentfault.com/a/1190000007778403):

    public static void gitUpLoad(WebDriver driver,String uploadUrl,String fileName,String content,String branch,String requestUrl) throws  Exception{

        String authenticity_token = getToken(driver,uploadUrl);//获取token
        RestTemplate template = new RestTemplate();
        HttpHeaders headers = getHeader(driver);//获取header
        MultiValueMap<String,String> param = new LinkedMultiValueMap<String, String>();//参数放入一个map中,restTemplate不能用hashMap
        //将请求参数放入map中
        param.add("authenticity_token",authenticity_token);
        param.add("file_name",fileName);
        param.add("encoding","text");
        param.add("commit_message","addFile");
        param.add("target_branch",branch);
        param.add("original_branch",branch);
        param.add("content",content);
        param.add("utf8","✓");
        //System.out.println("参数内容为:" + param.toString());
        HttpEntity<MultiValueMap<String,String>> request = new HttpEntity<MultiValueMap<String,String>>(param,headers);//将参数和header组成一个请求
        ResponseEntity<String> response = template.postForEntity(requestUrl, request, String.class);

    }

四、使用exchange指定调用方式

使用exchange方法可以指定调用方式

需要注意的一点是对于返回结果为204 no content,这种没有返回值的请求,RestTemplate会抛错,有需要的话可以使用httpClient的fluent
public  void  deleteQueue(String vhost,String queue){

        HttpHeaders headers = new HttpHeaders();//header参数
        headers.add("authorization",Auth);
        headers.setContentType(MediaType.APPLICATION_JSON);

        JSONObject content = new JSONObject();//放入body中的json参数
        content.put("mode","delete");
        content.put("name",queue);
        content.put("vhost","/" + vhost);

        String newVhost = "%2F" + vhost;
        String newUrl = url + "/api/queues/" + newVhost + "/" + queue;

        HttpEntity<JSONObject> request = new HttpEntity<>(content,headers); //组装
  
        ResponseEntity<String> response = template.exchange(newUrl,HttpMethod.DELETE,request,String.class);
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容