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.