最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot實(shí)現(xiàn)postman中form-data傳參實(shí)現(xiàn)過程

 更新時間:2026年04月02日 09:26:49   作者:濤哥是個大帥比  
在項目場景開發(fā)中,對接需求要求使用POST請求傳form-data數(shù)據(jù),使用HttpClient請求時遇到了415錯誤,后改為restTemplate,封裝參數(shù)時使用LinkedMultiValueMap對象以解決參數(shù)無法正確解析的問題

項目場景

開發(fā)中遇到對接需求時候,被要求用post請求傳form-data數(shù)據(jù)的時候一臉懵逼,在postman中可以調(diào)用,但是程序中怎么調(diào)用呢。

問題描述

在postman中調(diào)用是沒問題的

但是在程序中調(diào)用就報錯了,之前用的是HttpClient的方式請求的

public StringBuffer caller(Map<String,String> map, String strURL) {
        // start
        HttpClient httpClient = new HttpClient();
 
        HttpConnectionManagerParams managerParams = httpClient
                .getHttpConnectionManager().getParams();
        // 設(shè)置連接超時時間(單位毫秒)
        managerParams.setConnectionTimeout(30000);
        // 設(shè)置讀數(shù)據(jù)超時時間(單位毫秒)
        managerParams.setSoTimeout(120000);
 
        PostMethod postMethod = new PostMethod(strURL);
        // 將請求參數(shù)的值放入postMethod中
        String strResponse = null;
        StringBuffer buffer = new StringBuffer();
        // end
        try {
            //設(shè)置參數(shù)到請求對象中
            for(String key : map.keySet()){
                postMethod.addParameter(key, map.get(key));
            }
            
            int statusCode = httpClient.executeMethod(postMethod);
            if (statusCode != HttpStatus.SC_OK) {
                throw new IllegalStateException("Method failed: "
                        + postMethod.getStatusLine());
            }
            BufferedReader reader = null;
            reader = new BufferedReader(new InputStreamReader(
                    postMethod.getResponseBodyAsStream(), "UTF-8"));
            while ((strResponse = reader.readLine()) != null) {
                buffer.append(strResponse);
            }
        } catch (Exception ex) {
            throw new IllegalStateException(ex.toString());
        } finally {
            // 釋放連接
            postMethod.releaseConnection();
        }
        return buffer;
    }

請求普通的接口沒問題,但是第三方的接口會報錯:415 Unsupported Media Type ,很明顯是請求方式的問題,然后我在請求頭加上了multipart/form-data,接口請求通了,但是報錯參數(shù)錯誤,也就是接口沒獲取到參數(shù)。

postMethod.setRequestHeader("Content-Type", "multipart/form-data");

原因分析

form-data主要是以鍵值對的形式來上傳參數(shù),同時參數(shù)之間以&分隔符分開。

我就嘗試?yán)胢ap進(jìn)行數(shù)據(jù)的的封裝Map<String,String>,結(jié)果發(fā)現(xiàn)后臺無法正確解析參數(shù),是因為map封裝后并不是以&鏈接的。

解決方案

最后利用spring來作為后端框架,form-data利用LinkedMultiValueMap對象來包裝多個參數(shù),參數(shù)以key-value形式,中間以&連接。

采用restTemplate代碼的實(shí)現(xiàn)如下:

public String caller(Map<String,String> map, String strURL){
		HttpHeaders headers = new HttpHeaders();
		MultiValueMap<String, Object> map= new LinkedMultiValueMap<>();
		headers.add("Content-Type", "multipart/form-data");
	    //設(shè)置參數(shù)到請求對象中
        for(String key : map.keySet()){
        	map.add(key, map.get(key));
        }
		
		HttpEntity<MultiValueMap<String, Object>> requestParams = new HttpEntity<>(map, headers);
		ResponseEntity<String> response = restTemplate.postForEntity(apiUrl,requestParams,String.class);
		String result =response.getBody();
		return result;
}

最后沒用HttpClient 的方式,改為了restTemplate的方式。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 輕松掌握J(rèn)ava模板模式

    輕松掌握J(rèn)ava模板模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava模板模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Java實(shí)現(xiàn)將容器 Map中的內(nèi)容保存到數(shù)組

    Java實(shí)現(xiàn)將容器 Map中的內(nèi)容保存到數(shù)組

    這篇文章主要介紹了Java實(shí)現(xiàn)將容器 Map中的內(nèi)容保存到數(shù)組,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • 解決idea的debug模式突然變卡,項目啟動變慢的狀況

    解決idea的debug模式突然變卡,項目啟動變慢的狀況

    這篇文章主要介紹了解決idea的debug模式突然變卡,項目啟動變慢的狀況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java?-jar命令如何運(yùn)行外部依賴JAR包

    Java?-jar命令如何運(yùn)行外部依賴JAR包

    在Java應(yīng)用部署中,java?-jar命令是啟動可執(zhí)行JAR包的標(biāo)準(zhǔn)方式,但當(dāng)應(yīng)用需要依賴外部JAR文件時,直接使用java?-jar會面臨類加載困境,本文就來聊聊該如何解決吧
    2025-06-06
  • RestTemplate get請求,header設(shè)置及傳參過程

    RestTemplate get請求,header設(shè)置及傳參過程

    文章介紹了在SpringBoot中使用RestTemplate進(jìn)行GET請求時的請求頭設(shè)置及傳參方式,包括無參數(shù)無請求頭、有請求頭無參數(shù)和有請求頭有參數(shù)三種情況,并提供了相應(yīng)的RestTemplate代碼示例
    2026-02-02
  • Java推送釘釘應(yīng)用消息實(shí)現(xiàn)過程

    Java推送釘釘應(yīng)用消息實(shí)現(xiàn)過程

    這篇文章主要介紹了Java推送釘釘應(yīng)用消息實(shí)現(xiàn)的相關(guān)資料,包括創(chuàng)建應(yīng)用、獲取憑證、申請接口權(quán)限及調(diào)用接口流程,并提供Maven依賴配置,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-07-07
  • 基于mybatis batch實(shí)現(xiàn)批量提交大量數(shù)據(jù)

    基于mybatis batch實(shí)現(xiàn)批量提交大量數(shù)據(jù)

    這篇文章主要介紹了基于mybatis batch實(shí)現(xiàn)批量提交大量數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 利用Mybatis?Plus實(shí)現(xiàn)一個SQL攔截器

    利用Mybatis?Plus實(shí)現(xiàn)一個SQL攔截器

    SQL攔截器是一種用于攔截和修改Mybatis執(zhí)行的SQL語句的工具,通過使用SQL攔截器,開發(fā)人員可以在執(zhí)行SQL語句之前或之后對其進(jìn)行修改或記錄,本文就來借助一下Mybatis-Plus實(shí)現(xiàn)一個SQL攔截器吧
    2023-05-05
  • 使用Arthas MCP對Java應(yīng)用進(jìn)行線上診斷的實(shí)踐指南

    使用Arthas MCP對Java應(yīng)用進(jìn)行線上診斷的實(shí)踐指南

    本文介紹了使用Arthas4.1.9診斷Java應(yīng)用常見問題(CPU飆高、內(nèi)存泄漏、死鎖、線程池滿、慢方法、異常被吞)的方法,并提出構(gòu)建一個全自動的Java應(yīng)用診斷系統(tǒng),通過AIagent結(jié)合MCP協(xié)議調(diào)用Arthas診斷工具,生成結(jié)構(gòu)化的診斷報告,簡化問題定位過程,需要的朋友可以參考下
    2026-05-05
  • Java GUI插入圖片不顯示問題解決方法

    Java GUI插入圖片不顯示問題解決方法

    大家好,本篇文章主要講的是Java GUI插入圖片不顯示問題解決方法,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01

最新評論

洪江市| 巴青县| 梓潼县| 卫辉市| 林口县| 康定县| 澎湖县| 柘城县| 泸溪县| 鹤峰县| 阳朔县| 嘉禾县| 杭锦后旗| 额济纳旗| 梅河口市| 葫芦岛市| 海门市| 望江县| 时尚| 新闻| 浦县| 兖州市| 古丈县| 房产| 忻城县| 宜兰市| 镇江市| 富川| 扶绥县| 佛坪县| 广丰县| 奉化市| 丹凤县| 颍上县| 资溪县| 图木舒克市| 宁海县| 开平市| 镇雄县| 稻城县| 桂平市|