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

当使用multipart/form-data或multipart/mixed将JSON与文件一起获取时,使Spring映射

湛鸿雪
2023-03-14

我有一个可行的解决方案,但它似乎是愚蠢的需要。

这是我的工作解决方案:

@PreAuthorize("isAuthenticated()")
@ApiOperation(value = "Takes in a document.", nickname = "Document Upload", response = DocumentResponse[].class)
@ResponseStatus(HttpStatus.ACCEPTED)
@RequestMapping(
        value = "/api/v1/document/upload",
        produces = "application/json",
        consumes = "multipart/form-data",
        method = RequestMethod.POST)
public DocumentResponse uploadDocument(
        // THIS is where I am using a String and don't want to.
        @RequestPart("fileData") String fileData, 
        @RequestPart("file") MultipartFile file,
        @RequestHeader("idempotency-id") String idempotencyId) throws IOException {

    // THIS is the line I would also like to avoid.
    DocumentUploadFileData fileDataObj = objectMapper.readValue(fileData, DocumentUploadFileData.class);

    printBeanValues(fileDataObj);

    More after....
  1. 而不是@requestpart。我真的以为那会很好。不是的。
  2. 列表项@requestbody。我以为这肯定能行。相反,它开始对我大喊大叫,说我的内容/类型无效?内容类型没有改变,但出于某种原因,它希望它是Application/JSON(尽管我明确地说是multipart/form-data。我猜@reqestbody是针对Application/JSON请求的,它不喜欢玩multipart?
  3. 我还尝试使用RequestParam,如果我使用字符串作为对象,它实际上可以工作。如果我尝试使用DocumentUploadFileData,它会失败,并告诉我它没有对象的映射策略?我认为这是一个多部分的请求这一事实使spring决定使用不同的映射器,也许我需要添加这些映射器?我知道多部分请求使用边界,通常只是有点不同,所以它可能需要一个不同的解决方案是有道理的。我只是不知道怎么提供。

我已经3年没有使用Spring了,我肯定解决方案并不复杂,但是,我仍然没有得到它,在几个小时后。

共有1个答案

华谭三
2023-03-14

尝试熟悉以下解决方案:Spring MVC Multipart Request with JSON

@RequestMapping(value = "/executesampleservice", method = RequestMethod.POST,
        consumes = {"multipart/form-data"})
    @ResponseBody
    public boolean executeSampleService(
            @RequestPart("properties") @Valid ConnectionProperties properties,
            @RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
        return projectService.executeSampleService(properties, file);
    }
 类似资料:
  • 问题内容: 我正在尝试使用伪装完成多部分文件上传,但似乎在任何地方都找不到很好的示例。我本质上希望HTTP请求类似于以下内容: 甚至… 我是否需要手动构建请求主体,包括生成多部分边界?考虑到此客户端可以执行的其他所有操作,这似乎有点过头了。 问题答案: 不,你没有。您只需要定义一种代理接口方法,将content-type指定为:multipart / form- data和其他信息,例如远程API

  • 我正在尝试使用curl向REST服务发布一个xml文件(utf-16编码)。REST服务需要“multipart/form-data”内容类型。 Curl脚本:Curl-k-i-h“content-type=multipart/form-data”-f“filename=@file.xml;type=text/xml”-x POST-u: 然而,我在运行脚本时得到500个内部服务器错误。 响应:<

  • 我试图使用feign完成一个多部分文件上传,但是我似乎在任何地方都找不到一个好的例子。我基本上希望HTTP请求的结果类似如下: 或者甚至… 我需要手动构建请求体吗,包括生成多部分边界?考虑到这个客户端可以做的所有其他事情,这似乎有点过分。

  • 我正在尝试上传一个文本文件(也尝试了PDF等)到Salesforce。文本文件包含“Hello World”。 这是我正在使用的代码 这将导致以下看起来符合Salesforce指导原则的请求正文:https://developer.Salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_insert_update_bl

  • 问题内容: 我想在JavaScript中使用XMLHttpRequest来发布包含文件类型输入元素的表单,以便避免页面刷新并返回有用的XML。 我可以使用JavaScript将表单上的目标属性设置为MSIE的iframe或Mozilla的对象,而无需刷新页面即可提交表单,但这有两个问题。较小的问题是目标与W3C不兼容(这就是为什么我在JavaScript中而不是在XHTML中设置目标)。主要问题是

  • 我有一个用例,我需要通过AWS API网关使用AngularJS应用程序将CSV文件上传到我的后端应用程序(运行在Elastic Beanstalk-Django Python REST应用程序中)。 API网关与AWS Cognito集成。 后端应用程序需要CSV上载的表单数据。 重要设置在API网关资源POST方法中完成 API网关->设置->二进制媒体类型-添加了‘多部分/表单-数据 将标题