我有一个 POST 方法,需要同时支持 multipart/form-data 和 application/json。
即消耗 = { MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_VALUE }
当我支持Multipart请求时,我需要一个multipart文件和一个multipart json,可以通过如下声明来获取:
1号线->
@RequestPart("file") MultipartFile file, @RequestPart("jsonString") InputJsonVO inputJsonVO
同样,当支持 application/json 时,我需要接受整个正文作为 Json 内容:
2 号线 ->
@RequestBody InputJsonVO inputJsonVO
当我们有第 1 行或第 2 行时,它可以正常工作,但不能同时使用与参数相同的方法。
`@PostMapping(path = "/multipart", consumes = { MediaType.MULTIPART_FORM_DATA_VALUE,
MediaType.APPLICATION_JSON_VALUE })
public String getMessage(@RequestPart(required=false, name="file") MultipartFile file, @RequestPart(required=false, name="jsonString") InputJsonVO inputJsonVO,
@RequestBody(required=false) InputJsonVO inputJsonVO2
)`
如果我发送 POST 请求,则使用此方法声明:
POST /multipart HTTP/1.1
Host: localhost:8080
content-type: application/json
Content-Length: 335
<A Valid Json>
这个效果很好。
但是当我从邮递员发送如下 POST 请求时,它不起作用:
POST /multipart HTTP/1.1
Host: localhost:8080
Content-Length: 650
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="/C:/Users/sdamarla/Downloads/J867FE94.jpeg"
Content-Type: image/jpeg
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="jsonString"
Content-Type: application/json
<A valid Json>
----WebKitFormBoundary7MA4YWxkTrZu0gW
给出以下错误:
Content type 'multipart/form-data;boundary=--------------------------335202067624768397899751' not supported]
注意:当删除@RequestBody和相应的参数时,多部分请求工作正常。
请告诉我这是否是一个有效的用例,如果是,我在哪里失败了。
只需定义两种不同的方法,一种用于每种表示:
@PostMapping(path = "/multipart", consumes = MediaType.APPLICATION_JSON_VALUE)
public String getMessage(@RequestBody InputJsonVO inputJsonVO) {
getMessage(null, inputJsonVO);
}
@PostMapping(path = "/multipart", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public String getMessage(@RequestPart MultipartFile file, @RequestPart InputJsonVO inputJsonVO) {
// your code here
}
不重复: @PostMapping(path = "/multipart", 消耗 = { MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_VALUE })