【问题标题】:Spring boot send RequestBody and RequestParamSpring Boot 发送 RequestBody 和 RequestParam
【发布时间】:2018-03-11 06:38:36
【问题描述】:

我正在创建 api,我需要在一个请求中发送 Json(作为对象)和图像文件。所以这就是我的做法。

@PostMapping("/upload")
public String singleFileUpload(@RequestBody Item item, @RequestParam("file") MultipartFile file) {
   // logic
}

以及我如何使用 Postman 测试此方法

这是标题

这也是我的物品对象

{
    "title": "useruser",
    "description": "Woodfsdfw",
    "img": "www.gosdfsdfsdfsdfog.elt",
    "lat": 45.48745,
    "lng": 96.5651655,
    "user": {
        "name": "Jerry",
        "img" : "sdfsdfdfsdf",
        "email": "jrry@gmail.com"
    }
}

所以这是我从服务器得到的响应

 {
    "timestamp": 1520750026769,
    "status": 415,
    "error": "Unsupported Media Type",
    "exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
    "message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryYzp58riGtVnLl7mI;charset=UTF-8' not supported",
    "path": "/api/upload"
}

我已经为此苦苦挣扎了 4 个小时。知道如何解决吗? 编辑 在我使用Content-Type multipart/form-data 之后,我得到了这个错误

{
    "timestamp": 1520750811814,
    "status": 500,
    "error": "Internal Server Error",
    "exception": "org.springframework.web.multipart.MultipartException",
    "message": "Could not parse multipart servlet request; nested exception is java.io.IOException: org.apache.tomcat.util.http.fileupload.FileUploadException: the request was rejected because no multipart boundary was found",
    "path": "/api/upload"
}

【问题讨论】:

  • 使用Content-Type of multipart/form-data
  • @ShaneCoder 我编辑了我的答案。我以前尝试过使用它。但据我所知邮递员自动设置正确Content-Type

标签: java spring multipartform-data


【解决方案1】:

您应该使用@RequestPart 作为您的输入参数,例如:

@PostMapping("/upload", consumes = {"multipart/form-data"})
public String singleFileUpload(@RequestPart("item") Item item, @RequestPart("file") MultipartFile file) {
   // logic
}

使用 curl 请求验证

curl -H 'Content-Type: multipart/form-data' -F item='{"key": "value"};type=application/json' -F file='@/path/to/file;type=application/octet-stream' http://'your-url' --trace-ascii -

如果 curl 跟踪输出仍然不适合您,请打印它。

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多