内容类型 'multipart/form-data;boundary=----...;字符集 = UTF-8' 不支持

2022-09-01 06:26:26

我想向控制器发送一个对象,该对象具有多个包含文件的列表和多个具有纯文本的字段。

public class ContributionNew<T extends MovieInfoDTO> {
    private List<T> elementsToAdd;
    private Map<Long, T> elementsToUpdate;
    private Set<Long> idsToDelete;
    private Set<String> sources;
    private String comment;
}

public class Photo extends MovieInfoDTO {
    private MultipartFile photo;
}

@PostMapping(value = "/{id}/contributions/photos")
@ResponseStatus(HttpStatus.CREATED)
public
ResponseEntity<Void> createPhotoContribution(
        @ApiParam(value = "The movie ID", required = true)
        @PathVariable("id") final Long id,
        @ApiParam(value = "The contribution", required = true)
        @RequestBody @Valid final ContributionNew<Photo> contribution
) {

我正在使用邮递员发送数据。但是,他把我扔掉了

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarywY7ByvgonAjDoaCT;charset=UTF-8' not supported

我应该为此控制器设置什么内容类型,以便我可以发送具有纯文本字段和文件列表的对象?

如果我在标题中设置了标题

Content-type: multipart/form-data; charset=utf-8

它把我扔进了控制台

org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

答案 1

如前所述,dknight @RequestBody意味着使用JSON或XML数据来映射DTO Bean。对于多部分文件,您不能使用 JSON 数据,因此不能使用@RequestBody。尝试使用@ModelAttribute注释。

工作样本 :

@PostMapping("/promoters")
@Timed
public ResponseEntity<PromoterDTO> createPromoter(@ModelAttribute PromoterDTO promoterDTO) throws URISyntaxException { ... }

使用PromoderDTO,如下所示:

    public class PromoterDTO implements Serializable {

        private Long id; 

        private String name;

        private String address;

        private MultipartFile logo;
    }

答案 2

在Postman中,您需要将正文设置为原始类型,从下拉列表中选择JSON,我遇到了类似的问题,这解决了我的问题。

view screen here