Karena MockMvcRequestBuilders#fileUpload
sudah tidak digunakan lagi, Anda akan ingin menggunakan MockMvcRequestBuilders#multipart(String, Object...)
yang mengembalikan file MockMultipartHttpServletRequestBuilder
. Kemudian rangkai banyak file(MockMultipartFile)
panggilan.
Berikut adalah contoh yang berfungsi. Diberikan a@Controller
@Controller
public class NewController {
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public String saveAuto(
@RequestPart(value = "json") JsonPojo pojo,
@RequestParam(value = "some-random") String random,
@RequestParam(value = "data", required = false) List<MultipartFile> files) {
System.out.println(random);
System.out.println(pojo.getJson());
for (MultipartFile file : files) {
System.out.println(file.getOriginalFilename());
}
return "success";
}
static class JsonPojo {
private String json;
public String getJson() {
return json;
}
public void setJson(String json) {
this.json = json;
}
}
}
dan tes unit
@WebAppConfiguration
@ContextConfiguration(classes = WebConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class Example {
@Autowired
private WebApplicationContext webApplicationContext;
@Test
public void test() throws Exception {
MockMultipartFile firstFile = new MockMultipartFile("data", "filename.txt", "text/plain", "some xml".getBytes());
MockMultipartFile secondFile = new MockMultipartFile("data", "other-file-name.data", "text/plain", "some other type".getBytes());
MockMultipartFile jsonFile = new MockMultipartFile("json", "", "application/json", "{\"json\": \"someValue\"}".getBytes());
MockMvc mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
mockMvc.perform(MockMvcRequestBuilders.multipart("/upload")
.file(firstFile)
.file(secondFile)
.file(jsonFile)
.param("some-random", "4"))
.andExpect(status().is(200))
.andExpect(content().string("success"));
}
}
Dan @Configuration
kelasnya
@Configuration
@ComponentScan({ "test.controllers" })
@EnableWebMvc
public class WebConfig extends WebMvcConfigurationSupport {
@Bean
public MultipartResolver multipartResolver() {
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
return multipartResolver;
}
}
Tes harus lulus dan memberikan hasil
4 // from param
someValue // from json file
filename.txt // from first file
other-file-name.data // from second file
Hal yang perlu diperhatikan adalah Anda mengirim JSON seperti file multipart lainnya, kecuali dengan tipe konten yang berbeda.
MethodArgumentConversionNotSupportedException
saat mengenai pengontrol .. ada langkah kecil yang terlewat di sini? - stackoverflow.com/questions/50953227/…Lihat contoh ini yang diambil dari showcase MVC musim semi, ini adalah tautan ke kode sumber :
sumber
fileUpload
tidak digunakan lagi karenamultipart(String, Object...)
.Sebagai gantinya, metode
MockMvcRequestBuilders.fileUpload
ini sudah tidak digunakan lagiMockMvcRequestBuilders.multipart
.Ini contohnya:
sumber
Inilah yang berhasil untuk saya, di sini saya melampirkan file ke EmailController saya yang sedang diuji. Lihat juga tangkapan layar tukang pos tentang cara saya memposting data.
sumber
Jika Anda menggunakan Spring4 / SpringBoot 1.x, perlu disebutkan bahwa Anda juga dapat menambahkan bagian "teks" (json). Ini dapat dilakukan melalui file MockMvcRequestBuilders.fileUpload (). (MockMultipartFile file) (yang diperlukan karena metode
.multipart()
tidak tersedia dalam versi ini):sumber