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

新手上路,请多包涵

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

 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
) {

我正在使用 postman 发送数据。然而,他抛弃了我

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

原文由 sdafasdf 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
1 个回答

如前所述,dknight @RequestBody 意味着使用 JSON 或 XML 数据映射您的 DTO bean。在 MultipartFile 的情况下,你不能使用 JSON 数据,所以你不能使用@RequestBody。尝试使用 @ModelAttribute 注释。

工作样本:

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

像这样使用 PromoterDTO:

     public class PromoterDTO implements Serializable {

        private Long id;

        private String name;

        private String address;

        private MultipartFile logo;
    }

原文由 uncleBounty 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题