如何在 MockMVC 中 POST 多部分/表单数据?

jaw*_*wsh 6 java spring multipartform-data spring-mvc mockmvc

我创建了一个控制器,它将使用“multipart/form-data”

@PostMapping(value="/sample")
public void sample(
    @ModelAttribute("request") SampleRequest request){
    // codes
}
Run Code Online (Sandbox Code Playgroud)

样本请求对象

@NotNull
private MultipartFile file;

@Pattern(regexp = "^[0-9A-Za-z]*")
private String fileName;

private String other;
Run Code Online (Sandbox Code Playgroud)

现在,我将尝试使用 Mock MVC 来测试它,但我不知道如何将“multipart/form-data”作为内容传递。我看到很多使用 JSON 的示例,但没有使用 multipart/form-data

mockMvc.perform(post(path)
        .servletPath(path)
        .headers(headers)
        .contentType(MediaType.MULTIPART_FORM_DATA)
        .content(request)) // -> How to put the multipart/form-data here
        .andDo(print())
        .andReturn();
Run Code Online (Sandbox Code Playgroud)

有没有办法可以使用 multipart/form_data 完成我的请求?理想情况下,它需要位于 MockHttpServletRequest 的主体中

MockHttpServletRequest:
  HTTP Method = POST
  Request URI = --path
  Parameters = {}
  Headers = --headers
  Body = null
Run Code Online (Sandbox Code Playgroud)

Vit*_*niz 10

我已经设法这样做了:

      Resource fileResource = new ClassPathResource("YOUR FILE NAME");
    
      assertNotNull(fileResource);

      MockMultipartFile firstFile = new MockMultipartFile( 
            "file",fileResource.getFilename(),
             MediaType.MULTIPART_FORM_DATA_VALUE,
             fileResource.getInputStream());  
    
     assertNotNull(firstFile);
    
     MockMvc mockMvc = MockMvcBuilders.
             webAppContextSetup(webApplicationContext).build();

     MvcResult andReturn = mockMvc.perform(MockMvcRequestBuilders
           .multipart(**YOUR URL**)
           .file(firstFile)
           .headers(**YOUR HEADERS**))
            .andDo(print())
            .andExpect(status().isOk())
            .andReturn();
Run Code Online (Sandbox Code Playgroud)

我在这里看到过这个例子:

https://www.baeldung.com/spring-multipart-post-request-test