亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot中RestTemplate發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)示例

 更新時(shí)間:2024年03月07日 14:55:05   作者:JBIB  
RestTemplate是一個(gè) spring-web 提供的執(zhí)行HTTP請(qǐng)求的同步阻塞式工具類,本文就來(lái)介紹一下RestTemplate發(fā)送HTTP請(qǐng)求,具有一定的參考價(jià)值,感興趣的可以了解一下

一、前言

之前對(duì)發(fā)送http請(qǐng)求,使用過(guò)okhttp,還有httpclient等,這次就直接使用springboot的RestTemplate了。

二、不同的請(qǐng)求方式

我這里只針對(duì)POST請(qǐng)求做說(shuō)明:
下面針對(duì)post請(qǐng)求做三種說(shuō)明:

1、調(diào)用的接口參數(shù)用@RequestParam標(biāo)識(shí)

此種在APIfox中傳參方式是地址欄傳參數(shù),沒(méi)有請(qǐng)求體。

    /**
     * 發(fā)送沒(méi)有請(qǐng)求體的請(qǐng)求
     * @param url 請(qǐng)求url
     * @param reqParam 地址欄參數(shù)
     * @return 想要結(jié)果
     */
    public static JSONObject httpPostResult(String url, Map<String, Object> reqParam) {
        String params = getParameter(reqParam);
        if (StringUtils.isBlank(params)) {
            log.error("獲取sign失敗,sign=null");
            return null;
        }
        HttpEntity<Map<String, String>> httpEntity = new HttpEntity<>(setHeaders());
        //解析請(qǐng)求結(jié)果
        String result = new RestTemplate().postForObject(url + params, httpEntity, String.class);
        return JSONObject.parseObject(result);
    }
 
    /**
     * 對(duì)地址欄的參數(shù)進(jìn)行拼接
     * @param map 地址欄參數(shù)
     * @return 拼接后的結(jié)果
     */
    public static String getParameter(Map<String, Object> map) {
        try {
            if (MapUtil.isEmpty(map)) {
                return null;
            }
            String result = "";
            for (String key : map.keySet()) {
                if (Objects.nonNull(map.get(key) )) {
                    if (!"".equals(result)) {
                        result += "&";
                    }
                    result = result + key + "=" + map.get(key);
                }
            }
            return result;
        } catch (Exception e) {
            log.error("map轉(zhuǎn)參出錯(cuò)", e);
        }
        return null;
    }

    /**
     * 設(shè)置請(qǐng)求頭
     * @return 請(qǐng)求頭
     */
   private static HttpHeaders setHeaders() {
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Accept", MediaType.APPLICATION_JSON.toString());
        httpHeaders.add("Accept-Charset", "UTF-8");
        return httpHeaders;
    }

在Apifox中調(diào)用如下:

請(qǐng)求體body=none。

對(duì)應(yīng)的curl命令如下:

curl --location --request POST 'http://xxx:8080/tree/getTree?param1=abc&param2=123&param3=def' \

2、調(diào)用的接口參數(shù)用@RequestBody標(biāo)識(shí)

此種在APIfox中傳參方式是地址欄需要傳參數(shù),且有請(qǐng)求體。

    /**
     * 發(fā)送帶有地址欄參數(shù),有請(qǐng)求體的請(qǐng)求
     * @param url 請(qǐng)求 url
     * @param reqParam url上的參數(shù)
     * @param reqBody 請(qǐng)求體
     * @return 響應(yīng)結(jié)果
     */
    public static JSONObject httpPostResult(String url, Map<String, Object> reqParam, Map<String, Object> reqBody) {
        String params = getParameter(reqParam);
        if (StringUtils.isBlank(params)) {
            log.error("獲取sign失敗,sign=null");
            return null;
        }
        //封裝請(qǐng)求頭和內(nèi)容
        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(reqBody, setHeaders());
        //解析請(qǐng)求結(jié)果
        String result = new RestTemplate().postForObject(url + params, requestEntity, String.class);
        return JSONObject.parseObject(result);
    }

Apifox上我就只展示body了:

Params和上面的沒(méi)有請(qǐng)求體的一樣。

curl命令如下:

curl --location --request POST 'http://xxx:8080/tree/getTree?param1=abc&param2=123&param3=def' --header 'Content-Type: application/json' \
--data-raw '{"parentId":80}'

這個(gè)命令里面的data-raw的值就是請(qǐng)求體。

3、調(diào)用的接口參數(shù)沒(méi)有標(biāo)識(shí)

這種的是所有的參數(shù)都使用form-data的格式進(jìn)行傳輸:

這種就必須使用LinkedMultiValueMap對(duì)參數(shù)進(jìn)行封裝:

    /**
     * 發(fā)送form-data請(qǐng)求
     * @param url 請(qǐng)求 url
     * @param data 請(qǐng)求體
     * @return 響應(yīng)結(jié)果
     */
    public JSONObject httpPostResult(String url, MultiValueMap<String, String> data) {
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
        //解析請(qǐng)求結(jié)果
        HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(data, headers);
        ResponseEntity<String> response = restTemplate.postForEntity(url, requestEntity, String.class);
        return JSONObject.parseObject(response.getBody());
    }

對(duì)應(yīng)的controller中不需要任何注解:

 @PostMapping("/postRequest")
    public JSONObject intervalData(ChargeLogIntervalDataReq request) {
        String url = "http://xxx:8081/api/list";
        MultiValueMap<String, String> data = new LinkedMultiValueMap<>();
        data.put("page", Lists.newArrayList(request.getPage()));
        data.put("limit", Lists.newArrayList(request.getLimit()));
        return httpUtils.httpPostResult(url, data);
    }

這里要注意,MultiValueMap的value得是list才行。

到此這篇關(guān)于springboot中RestTemplate發(fā)送HTTP請(qǐng)求的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)springboot RestTemplate發(fā)送HTTP請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 為什么SpringBoot的jar可以直接運(yùn)行

    為什么SpringBoot的jar可以直接運(yùn)行

    這篇文章主要介紹了為什么SpringBoot的jar可以直接運(yùn)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java責(zé)任鏈設(shè)計(jì)模式實(shí)例分析

    Java責(zé)任鏈設(shè)計(jì)模式實(shí)例分析

    這篇文章主要介紹了Java責(zé)任鏈設(shè)計(jì)模式,結(jié)合實(shí)例形式詳細(xì)分析了Java責(zé)任鏈設(shè)計(jì)模式的原理與相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • 使用RocketMQTemplate發(fā)送帶tags的消息

    使用RocketMQTemplate發(fā)送帶tags的消息

    這篇文章主要介紹了使用RocketMQTemplate發(fā)送帶tags的消息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Javaweb動(dòng)態(tài)開(kāi)發(fā)最重要的Servlet詳解

    Javaweb動(dòng)態(tài)開(kāi)發(fā)最重要的Servlet詳解

    動(dòng)態(tài)web的核心是Servlet,由tomcat解析并執(zhí)行,本質(zhì)是Java中的一個(gè)類(面向?qū)ο螅┻@個(gè)類的功能十分強(qiáng)大幾乎可以完成全部功能,在Java規(guī)范中只有Servlet實(shí)現(xiàn)類實(shí)例化的對(duì)象才能被瀏覽器訪問(wèn),所以掌握Servlet具有重要意義
    2022-08-08
  • java實(shí)現(xiàn)租車系統(tǒng)

    java實(shí)現(xiàn)租車系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)租車系統(tǒng),以及遇到的兩個(gè)問(wèn)題解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Mybatis-plus解決兼容oracle批量插入的示例詳解

    Mybatis-plus解決兼容oracle批量插入的示例詳解

    Mybatis-Plus 是一個(gè) MyBatis 的增強(qiáng)工具,提供無(wú)侵入、損耗小的 CRUD 操作,本文給大家介紹了Mybatis-plus解決兼容oracle批量插入,文中通過(guò)大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-11-11
  • Java jvm垃圾回收詳解

    Java jvm垃圾回收詳解

    這篇文章主要介紹了JVM的垃圾回收總結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-10-10
  • 在springboot中注入FilterRegistrationBean不生效的原因

    在springboot中注入FilterRegistrationBean不生效的原因

    這篇文章主要介紹了在springboot中注入FilterRegistrationBean不生效的原因及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Nacos簡(jiǎn)介最新收藏版

    Nacos簡(jiǎn)介最新收藏版

    Nacos?是阿里巴巴推出來(lái)的一個(gè)新開(kāi)源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái),Nacos?幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái),對(duì)Nacos相關(guān)基本知識(shí)感興趣的朋友一起看看吧
    2023-08-08
  • jdk在centos中安裝配置圖文教程

    jdk在centos中安裝配置圖文教程

    這篇文章主要介紹了jdk在centos中安裝配置圖文教程,文中給出大家jdk下載地址,需要的朋友可以參考下
    2018-04-04

最新評(píng)論