【问题标题】:Java Spring: Content type 'multipart/form-data;boundary ;charset=UTF-8' not supportedJava Spring:不支持内容类型“multipart/form-data;边界;charset=UTF-8”
【发布时间】:2020-03-26 19:42:29
【问题描述】:

我已经创建了一个控制器:

@RequestMapping(value = "/photo/" , method = RequestMethod.POST)
public @ResponseBody
void addPhotoData(@RequestBody Photo photo, @RequestParam("data")
        MultipartFile photoData) {

    InputStream in = null;
    try {
        in = photoData.getInputStream();
        photoService.save(photo, in);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我用邮递员发送请求:

我不明白为什么会收到不支持的错误 415。 救命!

【问题讨论】:

标签: java spring multipartform-data


【解决方案1】:

尝试将请求正文包装到一个对象中。

 public class Payload {
   private String name;
   private String url;
   private MultipartFile data;
...
}

添加consumes = { "multipart/form-data" }

@RequestMapping(value = "/photo/" , method = RequestMethod.POST, consumes = { "multipart/form-data" })
public @ResponseBody void addPhotoData(@ModelAttribute Payload payload) {
...

}

还有MediaType.MULTIPART_FORM_DATA_VALUE 常量而不是使用那个字符串

【讨论】:

    【解决方案2】:

    这称为多部分混合类型。尝试像这样更改您的签名

    @RequestMapping(value = "/photo/" , method = RequestMethod.POST, consumes = {"multipart/mixed"})
    public @ResponseBody void addPhotoData(@RequestPart Photo photo, @RequestPart("data")
            MultipartFile photoData) {
    

    【讨论】:

    • @pvpkiran 我认为是对的。无论如何,这对我有用。关键点; 1)consumes="multipart/mixed"。 2) 照片 arg 变为 @RequestPart。 3) 最后,在撰写本文时,我认为 Postman 不支持发送 multipart/mixed 请求。但是,curl 这样做了,所以这个 curl 命令对我有用 curl -i -X POST -H "Content-Type: multipart/mixed" -F "photo={\"name\":\"test\"};type=application/json" -F "data=@/tmp/somefile" http://localhost:8080/photos。 HTH
    猜你喜欢
    • 2018-08-19
    • 2018-06-11
    • 2020-04-13
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2022-01-19
    相关资源
    最近更新 更多