我有一个我正在编写的Spring Boot应用程序,它使用Angular作为前端。
一个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代码的行为就像接收到的值是字符串末尾的单个空格上的数组spit一样。示例输入字符串是:
/ Users / mcpierce / Google Drive / comics / DC / 2018-01-17 / Superman Vol.2016#39(2018年3月).cbz
Java将此字符串视为两个字符串:
/ Users / mcpierce / Google Drive /漫画/ DC / 2018-01-17 /超人Vol.2016#39(三月,
和
2018).cbz
如果我将Java代码更改为仅将filenames参数视为字符串(而不是List或String []),那么我将获得整个字符串。如果它不止一个,那么每个都用公共(,)分隔。
有什么想法吗?
答案 0 :(得分:3)
我会说Spring运行得很好。但我们使用请求参数的方式是错误的。 Spring分隔请求参数并作为数组注入。
获取http://example.com?filenames=1,2,3,4
上面可以注入@RequestParam("filenames[]") String[] filenames
,每个条目都在数组中。
在您的情况下,它将被视为逗号的不同条目。尝试将其作为请求体对象发布,而不是作为请求参数发布并用于获取数组?
答案 1 :(得分:0)
您也可以尝试将[]添加到参数值中。
@RequestParam("filenames[]") String[] filenames