带有MultipartFile字段的发送对象列表返回415不支持的媒体类型



我试图将对象列表发送到api (Spring Boot),其中模型具有MultiPartFile字段和描述字段,但服务器每次返回我415 Unsupported Media Type。我在前端使用Angular 9来发送数据。

我的Java DTO对象看起来像:

public class FooRequestDTO {
private String description;
private MultipartFile file;
// getters.. setters..
}

My endpoint controller:

@PostMapping(value = "/foo", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
@ResponseBody
public void upload(@RequestBody List<FooRequestDTO> FooRequestDTOList) {
// something
}

和我在Angular中使用的方法:

upload(files: FileInfo[]): Observable<void> {
const formData = new FormData();
for (var i = 0; i < files.length;i++) {
formData.append(`description[]`, files[i].description);
formData.append(`file[]`, files[i].file);
}
return this.http.post<void>(`/foo`, formData);
}

我也尝试直接发送files对象,但它没有改变什么。FileInfo只有File filestring description字段

有解决我问题的方法吗?在网上我没有发现任何类似的问题。

您需要在请求中添加下面的标题详细信息来工作。

Content-Type: multipart/form-data; boundary=12345

首先修改api方法来处理formdata/仅formdata的List。如果列表的formdata对象意味着你的api是正确的,但angular代码是不正确的。如果只有一个formdata对象就意味着两个都不正确。

对于单个formdata对象,修改api代码如下:

@PostMapping(value = "/foo", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE})
@ResponseBody
public void upload(@RequestBody FooRequestDTO FooRequestDTOList) {
// something
}

角:如果只发送一个formdata对象,修改代码如下:

upload(files: FileInfo[]): Observable<void> {
const formData = new FormData();
for (var i = 0; i < files.length;i++) {
formData.append(`description`, files[i].description);
formData.append(`file`, files[i].file);
}
return this.http.post<void>(`/foo`, formData);
}

如果发送多个formdata对象意味着修改代码如下:如果只发送一个formdata对象,修改代码如下:

upload(files: FileInfo[]): Observable<void> {
const formData = new FormData();
for (var i = 0; i < files.length;i++) {
formData.append(`description`, files[i].description);
formData.append(`file`, files[i].file);
}
return this.http.post<void>(`/foo`, [formData]);
}

相关内容

  • 没有找到相关文章

最新更新