formdata數據後端如何獲取

一、獲取null數據

當前端向後端發送一個formdata的請求,但是請求中沒有攜帶數據時,後端需要做出相應的處理。

後端獲取formdata數據,一般是通過request.getParameter()來獲取的。在沒有數據的情況下,該方法會返回null。如果在後續操作中使用該參數,就會出現空指針異常的情況。因此,需要在使用該參數時,先進行判空處理。

String param = request.getParameter("param");
if(param != null){
    //後續操作
}

二、formdata數據格式請求

使用formdata格式的請求時,需要注意後端獲取的方式和普通的參數獲取方式是不同的。因為formdata格式是一個鍵值對,它不能通過request.getParameter()來獲取。

可以使用HttpServletRequest中的getInputStream()方法來獲取整個請求體的字節數組,然後通過解析字節數組來獲取相應的參數。

ServletInputStream inputStream = request.getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
    buffer.write(data, 0, nRead);
}
buffer.flush();
byte[] body = buffer.toByteArray();
String requestBody = new String(body, StandardCharsets.UTF_8);

三、formdata獲取不到值

當使用formdata格式提交表單參數時,如果後端無法獲取到相應的值,可以參考以下方法來排查問題。

首先,需要確認formdata中是否包含相應的鍵值對。其次,需要檢查請求頭中的Content-Type值是否正確。最後,也可以手動打印出整個請求體的字節數組來查看是否有問題。

四、後端獲取form表單數據

普通表單提交的參數可以通過request.getParameter()方法來獲取,但是使用formdata格式提交的表單參數不可以。除了上面提到的getInputStream()方法之外,後端還可以使用getParts()方法來獲取form表單數據。

該方法返回一個Part類型的List,遍歷該List即可獲取到表單中的每一個部分的值。

List parts = request.getParts();
for (Part part : parts) {
    String name = part.getName();
    if(part.getContentType() != null){
        InputStream inputStream = part.getInputStream();
        //後續操作
    } else{
        String value = new BufferedReader(new InputStreamReader(part.getInputStream(), StandardCharsets.UTF_8))
                       .lines().collect(Collectors.joining("\n"));
        //後續操作                   
    }
}

五、formdata格式傳遞參數

使用formdata格式傳遞參數時,一般會傳遞文件類型的參數。後端需要將文件保存到服務器本地,然後記錄文件的本地路徑。

String fileName = part.getSubmittedFileName();
String filePath = "/uploadFile/" + fileName; //文件保存路徑
InputStream inputStream = part.getInputStream();
FileOutputStream outputStream = new FileOutputStream(filePath);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();

六、後端接收formdata

最後,根據前端傳遞過來的formdata數據格式,後端需要有相應的數據接收類。該類需要用@RequestBody註解標註,並且類中的屬性需要與前端傳遞的鍵名相同。這樣,後端才能夠自動地將前端傳遞過來的formdata數據轉換成該類的一個對象。

@PostMapping("/uploadFile")
public String postFile(@RequestParam("file") MultipartFile file, 
                       @RequestParam("name") String name){
    //後續操作               
}

原創文章,作者:BXBC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/150285.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
BXBC的頭像BXBC
上一篇 2024-11-07 09:50
下一篇 2024-11-07 09:50

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python數據標準差標準化

    本文將為大家詳細講述Python中的數據標準差標準化,以及涉及到的相關知識。 一、什麼是數據標準差標準化 數據標準差標準化是數據處理中的一種方法,通過對數據進行標準差標準化可以將不…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29
  • Python如何打亂數據集

    本文將從多個方面詳細闡述Python打亂數據集的方法。 一、shuffle函數原理 shuffle函數是Python中的一個內置函數,主要作用是將一個可迭代對象的元素隨機排序。 在…

    編程 2025-04-29

發表回復

登錄後才能評論