簡體   English   中英

Spring Boot:發布到REST API會將單個字符串存儲為數組

[英]Spring Boot: Posting to a REST API is storing a single string as an array

我正在編寫一個使用Angular前端的Spring Boot應用程序。

一個REST API接受字符串數組作為輸入:

@RequestMapping(value = "/import", method = RequestMethod.POST)
@CrossOrigin
public void importComicFiles(@RequestParam("filenames") String[] filenames)
{
    for (String filename : filenames) { ... }
}

當前端使用以下命令發送字符串值數組時:

importFiles(filenames: string[]): Observable<Response> {
    const formData: FormData = new FormData();
    for (let index = 0; index < filenames.length; index++) {
      formData.append('filenames', filenames[index]);
    }
    return this.http.post(`${this.apiUrl}/files/import`, formData);
}

然后Java代碼將每個字符串作為數組中的單獨元素接收。 即使這些字符串中有空格。

但是,當使用單個字符串調用importFiles方法時,Java代碼的行為就好像接收到的值是字符串末尾的單個空格上的數組。 輸入字符串的示例是:

/ Users / mcpierce / Google Drive / comics / DC / 2018-01-17 / Superman Vol.2016#39(2018年3月).cbz

Java將此字符串視為兩個字符串:

/ Users / mcpierce / Google Drive / comics / DC / 2018-01-17 / Superman Vol.2016#39(3月,

2018)。

如果將Java代碼更改為僅將filenames參數視為字符串(而不是List或String []),則將得到整個字符串。 如果大於一個,則每個分隔符之間用一個公共(,)分隔。

有任何想法嗎?

我會說Spring運行得很好。 但是我們使用請求參數的方式是錯誤的。 Spring分隔請求參數並作為數組注入。

GET http://example.com?filenames=1,2,3,4

上面的代碼可以注入到@RequestParam("filenames[]") String[] filenames中,數組中的每個條目都可以。

在您的情況下,它將被視為逗號的不同條目,例如。 嘗試將其作為請求主體對象發布,而不是作為請求參數發布並用於獲取數組?

您也可以嘗試在參數值中添加[]。

@RequestParam("filenames[]") String[] filenames

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM