当前位置: 首页 > 面试题库 >

如何使用Spring MockMvc输入多部分/表单数据?

何飞翰
2023-03-14
问题内容

我有一个带有PUT方法的控制器方法,该方法接收multipart / form-data:

   @RequestMapping(value = "/putIn", method = RequestMethod.PUT)
   public Foo updateFoo(HttpServletRequest request,
                           @RequestBody Foo foo,
                           @RequestParam("foo_icon") MultipartFile file) {
    ...
   }

我想使用进行测试MockMvc。不幸的是MockMvcRequestBuilders.fileUpload创建了一个MockMultipartHttpServletRequestBuilder具有POST方法的实例:

super(HttpMethod.POST, urlTemplate, urlVariables)

编辑: 当然,我 不能 创建自己的实现MockHttpServletRequestBuilder,例如

public MockPutMultipartHttpServletRequestBuilder(String urlTemplate, Object... urlVariables) {
    super(HttpMethod.PUT, urlTemplate, urlVariables);
    super.contentType(MediaType.MULTIPART_FORM_DATA);
}

因为MockHttpServletRequestBuilder具有包本地构造函数。

但是我想知道是否还有其他更方便的 方法?可以这样做吗,可能是我错过了一些现有的类或方法吗?


问题答案:

是的,有一种方法,而且也很简单!

我自己也遇到了同样的问题。尽管我不满意Sam Brannen的回答,但似乎Spring
MVC现在支持PUT文件上传,因为我可以简单地使用Postman发出这样的请求(我使用的是Spring Boot
1.4.2)。因此,我一直在挖掘,发现唯一的问题是事实所MockMultipartHttpServletRequestBuilder返回MockMvcRequestBuilders.fileUpload()的方法将方法硬编码为“
POST”。然后我发现了with()方法…


这使我想出了这个巧妙的小窍门,以强制MockMultipartHttpServletRequestBuilder无论如何都要使用“ PUT”方法:

    MockMultipartFile file = new MockMultipartFile("data", "dummy.csv",
            "text/plain", "Some dataset...".getBytes());

    MockMultipartHttpServletRequestBuilder builder =
            MockMvcRequestBuilders.fileUpload("/test1/datasets/set1");
    builder.with(new RequestPostProcessor() {
        @Override
        public MockHttpServletRequest postProcessRequest(MockHttpServletRequest request) {
            request.setMethod("PUT");
            return request;
        }
    });
    mvc.perform(builder
            .file(file))
            .andExpect(status().ok());

奇迹般有效!



 类似资料:
  • 我已经成功地开发了一项服务,在该服务中,我阅读了在泽西岛以多部分形式上传的文件。以下是我所做工作的一个极其简化的版本: 这很好,但我有一个新的要求。除了上传的文件,我还需要处理任意数量的资源。假设这些是图像文件。 我想我应该为客户端提供一个表单,其中包含文件的一个输入,第一个图像的一个输入,以及允许向表单添加更多输入的按钮(使用AJAX或简单的纯JavaScript)。 因此,用户可以在表单中附加

  • 我需要实现一个RESTendpoint,它接收多部分/表单数据 我使用 -Spring Boot -Kotlin -Spring MVC 当我收到一个请求时,就会出现一个错误: 内容类型'multipart/form-data';boundary=----------------------------------------------------------------------------

  • 当我点击这个api时,我得到错误“415:Unsupported Media type”,这意味着不受支持的头。我想将文件从ARC加载到控制器。 我在pom.xml文件中添加了一些maven依赖项。 我的pom文件:

  • 我是Guzzle的新手,我正试图提出一个Rest请求来签署PDF文件。供应商表示: 您需要使用基本身份验证 系统返回一个包含签名PDF文件的响应,类型为application/octet stream 这是我用古斯测试的代码,但提供商说在应用程序/pdf中发送的mime类型。如何“强制”PDF文件的mimetype? 谢谢你的帮助。

  • 如何使用ajax或XMLHttpRequest从javascript调用RESTAPI,以使用内容类型:multipart/form data上载文件。 文件内容是二进制格式的,但我调用的API具有以下请求格式:Authorization:Bearer 我使用以下代码段上传文件内容: 其中formData是二进制格式的文件内容。请建议这是正确的方法还是应该以不同的方式处理。我使用的文件类型是IFC

  • 问题内容: 在Apache Commons HttpClient的3.x版本中,可以进行multipart / form-data POST请求(2004年的示例)。不幸的是,这在HttpClient的4.0版本中不再可能。 对于我们的核心活动“ HTTP”,多部分内容超出了范围。我们很乐意使用由其他项目维护的多部分代码,但我对此一无所知。几年前,我们曾尝试将多部分代码移至commons编解码器,