我试图将对象列表发送到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 file
和string 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]);
}