Saltar al contenido

¿Cómo PONER multipart / form-data usando Spring MockMvc?

Solución:

Sí, hay una manera, ¡y también es simple!

Yo me encontré con el mismo problema. Aunque la respuesta de Sam Brannen me desanimó, parece que Spring MVC hoy en día SÍ admite la carga de archivos PUT, ya que simplemente podría hacer tal solicitud usando Postman (estoy usando Spring Boot 1.4.2). Así que seguí investigando y descubrí que el único problema es el hecho de que MockMultipartHttpServletRequestBuilder devuelto por MockMvcRequestBuilders.fileUpload() tiene el método codificado en “POST”. Entonces descubrí el with() método…

y eso me permitió inventar este pequeño truco para forzar la MockMultipartHttpServletRequestBuilder para usar el método “PUT” de todos modos:

    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().isOk());

¡Funciona de maravilla!

Lamentablemente, esto no se admite actualmente en Spring MVC Test, y no veo una solución alternativa que no sea la de crear su propia costumbre MockPutMultipartHttpServletRequestBuilder y copiar y pegar código de la implementación estándar.

Por lo que vale, Spring MVC tampoco es compatible PUT solicitudes de carga de archivos de forma predeterminada. Los resolutores multiparte están codificados para aceptar solo POST solicitudes de carga de archivos, tanto para Apache Commons como para el soporte estándar de API de Servlet.

Si desea que Spring apoye PUT Además, siéntase libre de abrir un ticket en el rastreador de problemas JIRA de Spring.

¡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 *