SpringBoot處理form-data表單接收對象數(shù)組的方法
前言
主要是為了存檔,碰到表單傳對象數(shù)組的情況,一般都是一個表單只能傳一個對象,后面經(jīng)過跟前端的研究和討論發(fā)現(xiàn)居然可以傳對象數(shù)組,以此作為記錄分享。
@Data
public class SealLocationInfoRequest implements Serializable {
private static final long serialVersionUID = 2392716281569231777L;
private Long contractId;
private Long serverId;
private String filePath;
private List<SealLocationInfo> sealLocationInfoList;
}
@Data
public class SealLocationInfo implements Serializable {
private static final long serialVersionUID = -8706741125508276806L;
private Integer posType;//定位或關(guān)鍵字
private float posX;
private float posY;
private String signOnPage;
private Long sealId;
private String key;
private float width;
private Integer signType;//2.騎縫章 1.其他
}測試直接使用下標(biāo)方式請求
直接使用屬性下標(biāo)的方式傳遞
請求:

示例代碼:
@PostMapping(value = "/upload/multiple")
public ResponseEntity<ResponseResult<List<Object>>> uploadMultiple1213Batch(
MultipartFile pdfFile,
// @ModelAttribute("request")
List<SealLocationInfoRequest> request) throws Exception {
// @RequestParam("hosts") SealLocationInfoRequest hosts) throws Exception {
// @ModelAttribute("hosts") SealLocationInfoRequest hosts) throws Exception {
return OpsResponse.ok(null);
}結(jié)果:
java.lang.IllegalStateException: No primary or single unique constructor found for interface java.util.List
結(jié)果明顯不適配報錯
測試二使用對象包裹的方式傳輸
@PostMapping(value = "/upload/multiple")
public ResponseEntity<ResponseResult<List<Object>>> uploadMultiple1213Batch(
MultipartFile pdfFile,
// @ModelAttribute("request")
// List<SealLocationInfoRequest> request) throws Exception {
// @RequestParam("hosts") SealLocationInfoRequest hosts) throws Exception {
SealLocationInfoRequest hosts) throws Exception {
return OpsResponse.ok(null);
}請求體

curl的方式
curl --location 'http://localhost:8088/upload/record/upload/multiple' \ --header 'Content-Type: multipart/form-data' \ --header 'Accept: */*' \ --header 'Authorization: acf179d575a7492fbbf5deefbdc69fbd' \ --header 'from-service: trade-gateway' \ --header 'gateway_header: 2131321' \ --header 'traceId: 12312' \ --form 'sealLocationInfoList[0].posX="123213"'
頭一次發(fā)現(xiàn)還可以使用這種方式,就像json傳輸一樣,不過需要手動設(shè)置下標(biāo),對了,文件也可以這樣傳輸,可以放對象里面也可以放外面,但是屬性名字一樣會雙重注入。
SpringBoot的接收
1. 使用@RequestParam注解來接收表單數(shù)據(jù)中的數(shù)組對象。
以下是一個示例:
@PostMapping("/example")
public ResponseEntity<String> handleFormData(@RequestParam("objects") List<Object> objects) {
// 處理接收到的對象數(shù)組
return ResponseEntity.ok("Received " + objects.size() + " objects");
}在上面的示例中,我們使用@RequestParam注解來聲明我們要接收名為objects的表單參數(shù),并將其映射到一個List<Object>類型的變量中。
2. 如果你的對象是一個自定義類,您可以使用@ModelAttribute注解來將表單數(shù)據(jù)映射到該類的實例中。以下是一個示例:
@PostMapping("/example")
public ResponseEntity<String> handleFormData(@ModelAttribute("customObject") CustomObject[] customObjects) {
// 處理接收到的自定義對象數(shù)組
return ResponseEntity.ok("Received " + customObjects.length + " custom objects");
}在上面的示例中,我們使用@ModelAttribute注解來聲明我們要接收名為customObject的表單參數(shù),并將其映射到一個CustomObject[]類型的變量中。
3. `x-www-form-urlencoded` 和 `form-data` 協(xié)議的區(qū)別
`x-www-form-urlencoded` 和 `form-data` 是 HTTP 請求中常用的兩種表單數(shù)據(jù)編碼方式。
`x-www-form-urlencoded` 是默認(rèn)的編碼方式,它會將表單數(shù)據(jù)轉(zhuǎn)換為鍵值對,并使用 `&` 符號進行分隔,然后將鍵值對以 `key1=value1&key2=value2` 的形式進行編碼。這種編碼方式通常用于較小的表單數(shù)據(jù),如登錄表單等。
而 `form-data` 則是一種更加靈活的編碼方式,它可以處理二進制數(shù)據(jù)(如圖片、文件等)以及文本數(shù)據(jù)。它會將每個表單字段封裝成一個獨立的部分,每個部分都可以設(shè)置自己的 Content-Type,這樣就可以支持發(fā)送多個文件或者多個鍵值對。這種編碼方式通常用于上傳文件等操作。
總結(jié)
傳輸數(shù)組隊列不需要使用注解,在測試傳輸中不寫注解反而能通過寫了,寫了@RequestPart注解反而通過不了,具體細(xì)節(jié)之后更新細(xì)則講解,這篇主要講解協(xié)議和請求,主要解決了表單形式傳輸對象的問題。
參考資料
Difference Between form-data, x-www-form-urlencoded and raw in Postman | Baeldung
javascript - appending array to FormData and send via AJAX - Stack Overflow
到此這篇關(guān)于SpringBoot處理form-data表單接收對象數(shù)組的文章就介紹到這了,更多相關(guān)SpringBoot接收對象數(shù)組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot超詳細(xì)講解@Enable*注解和@Import
這篇文章主要介紹了SpringBoot?@Enable*注解和@Import,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
spring boot與redis 實現(xiàn)session共享教程
這篇文章主要介紹了spring boot與redis 實現(xiàn)session共享教程,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-04-04
JNI實現(xiàn)最簡單的JAVA調(diào)用C/C++代碼
這篇文章主要介紹了JNI實現(xiàn)最簡單的JAVA調(diào)用C/C++代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08
Java 動態(tài)數(shù)組的實現(xiàn)示例
Java動態(tài)數(shù)組是一種可以任意伸縮數(shù)組長度的對象,本文主要介紹了Java 動態(tài)數(shù)組的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
Java Scala數(shù)據(jù)類型與變量常量及類和對象超詳細(xì)講解
本文內(nèi)容主要分為3節(jié),依次講解:Scala的數(shù)據(jù)類型有哪些? 變量常量如何使用? 類和對象如何理解? 受限于博主的大腦容量,大概是無法做到事無巨細(xì)的,不過其實也沒必要那么"細(xì)",抓住主要脈絡(luò),加上大量的練習(xí),融會貫通只不過是時間的問題2022-12-12

