0

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

我的 Java DTO 对象如下所示:

public class FooRequestDTO {

    private String description;

    private MultipartFile file;

    // getters.. setters..

}

我的端点控制器:

@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字段。

有什么办法可以解决我的问题吗?在互联网上我没有发现任何类似的问题。

4

2 回答 2

0

您需要在请求中添加以下标头详细信息才能执行此操作。

Content-Type: multipart/form-data; boundary=12345
于 2021-10-20T19:20:47.010 回答
0

首先修改api方法来处理表单数据列表/仅表单数据。如果表单数据对象列表意味着您的 api 正确但角度代码不正确。如果只有单个 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]);
}
于 2021-10-26T22:02:19.777 回答