当前位置: 首页 > 知识库问答 >
问题:

如何通过spring boot Rest的相同方法支持多部分/表单数据和应用程序/json

颛孙航
2023-03-14

我有一个POST方法,它需要同时支持多部分/表单数据和应用程序/json。

i、 e.使用={MediaType.MULTIPART\u FORM\u DATA\u VALUE,MediaType.APPLICATION\u JSON\u VALUE}

当我支持多部分请求时,我需要一个多部分文件和一个多部分json,可以通过如下声明获得:

第1行-

同样,在支持应用程序/json时,我需要将整个正文作为json内容接受:

第2行-

当我们有第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 /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]

注意:删除@Request estBody和相应参数时,multipart请求工作正常。

请让我知道这是否是一个有效的用例,如果是,我在哪里失败了。

共有1个答案

穆景辉
2023-03-14

只需定义两种不同的方法,每个表示一种:

@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
}
 类似资料:
  • 问题 尝试发送一个包含文件上传和JSON中模型数据的多部分/表单数据post请求。不知道为什么没有太多的工作参考资料,无法使现有的参考资料发挥作用。也可能是做错了什么,或者使事情变得更复杂。 裁判试过了 使用angular js在同一请求中上载文件和json数据 关于边界和多部分的一个很好的解释 一些这样的问题 快速调整我的尝试 问题 不知何故,我的post请求负载上的json内容似乎不包含内容类

  • 这是在服务器端作为接收的内容: 如何转换multipart Confont数据类型中的文章对象?我读到改造可能允许使用转换器为这个。就我对文档的理解而言,它应该是实现的东西。 多部分部件使用的转换器,或者它们可以实现来处理自己的序列化。 null

  • 我正在为上传文件创建一个简单的。从其他API中,我发现它们使用“”内容类型。但对我来说,“”似乎要简单得多。 如果我不打算在文件中发送更多的表单数据,那么有什么理由使用“”而不是“”呢?

  • 问题内容: 我一直在使用与杰克逊结合使用Apache CXF来消费和产生JSON文件的Web服务。 但是,服务的一种方法应该能够保存从移动应用程序上传的图像,该图像向我的Web服务发出多部分/表单数据POST请求,而且我不知道如何在我的内部处理这种内容类型上下文。我们通常创建“ Request”和“ Response”对象来使用和产生JSON,但是,在这种情况下,这恐怕不起作用。 这是请求格式:

  • 问题内容: 我试图发送某种形式而不重新加载页面,并且试图理解幕后细节,因此不使用任何JavaScript库: 调用了upload_file(),但如果我做对了,则不会发送数据。请提供有关发送数据的正确方式的建议。 问题答案: 通过表单传递属性 如果您想获得回覆,可以使用这个 您可以通过或检索所有数据 更新有点晚 至于有关上传的@Varun问题,此代码无法直接处理文件上传,要使用此代码发送文件,您需

  • 通常,我需要通过JSOUP将数据以响应multipart/form-data的形式发送到站点 作为一个示例,使用一个简单的窗体来sgeniriruet您的查询。 <表单操作=«localhost:8000»方法=«post»enctype=»多部分/表单数据» <输入类型=»文本»名称=»文本»值=»文本默认值» <输入类型=»文件»名称=»文件1» <输入类型=»文件»名称=»文件2» 提交 通