Saltar al contenido

Spring Controller @RequestBody con carga de archivos ¿es posible?

Solución:

De hecho, puede simplificar su vida aquí, ya que todo lo que está haciendo es enviar un formulario que contiene algunos campos y un archivo. usted no necesita @RequestBody para lo que está tratando de hacer. Puede usar las funciones regulares de Spring MVC, por lo que su método de controlador se vería así:

@ResponseBody
public WebResponse<Boolean> updateEUSettings(
     Locale locale, 
     @Valid EUPSettingsWrapper endUserPortalSettingsWrapper, 
     @RequestParam(value = "file1", required = true) MultipartFile logo
) {


}

El cliente que envía la solicitud a este controlador deberá tener un formulario con enctype="multipart/form-data".

En su prueba de Spring MVC, escribiría algo como esto:

getMockMvc().perform(fileUpload(uri).file("file1", "some-content".getBytes()) 
                        .param("someEuSettingsProperty", "someValue")
                        .param("someOtherEuSettingsProperty", "someOtherValue")
                        .accept(MediaType.APPLICATION_JSON)
                        .contentType(MediaType.MULTIPART_FORM_DATA))
                        .andExpect(status().isOk());

Agregue el siguiente bean en su spring-servlet.xml para agregar el soporte para la solicitud de varias partes.

<bean id="multipartResolver"
    class="org.springframework.web.multipart.commons.CommonsMultipartResolver" />

Además, no olvide agregar la dependencia para tarro de carga de archivos comunes

No pude encontrar una manera de usar @RequestBody.

Sin embargo, puede hacer algo como esto:

@RequestMapping(value = "/uploadStuff", method = RequestMethod.POST)
public MyViewDto doStuff(@RequestPart("json") @Valid MyDto dto,
                         @RequestPart("file") MultipartFile file) { ... }

Puedes probarlo así:

MockMultipartFile jsonFile = new MockMultipartFile("json", "",
            "application/json", "{}".getBytes());
MockMultipartFile dataFile = new MockMultipartFile("file", "foo.zip", "application/octet-stream", bytes);

mockMvc.perform(fileUpload("/uploadStuff")
            .file(dataFile)
            .file(jsonFile))
            .andExpect(status().isOk());
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *