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