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

8

我创建了一个控制器:

@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();
    }
}

我使用Postman发送请求:enter image description here enter image description here

我不明白为什么会收到415不支持的错误。 请帮忙!


你在Postman中设置了Content-Type头吗?如果是,请尝试将其删除并重新发送请求。 - Priyak Dey
https://stackoverflow.com/a/62932391/9437031 - Dhwanil Patel
2个回答

10
尝试将请求体包装成一个对象。
 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常量,而不是使用该字符串


当我使用 consumes = { "multipart/form-data" } 时,我的路由停止工作了。 - Because i hate myself

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)Photo参数变成了@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。希望对你有帮助。 - Paul Warren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接