[英]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.