Así es como implementé Spring MVC Multipart Request con JSON Data.
Solicitud multiparte con datos JSON (también denominada multiparte mixta):
Basado en el servicio RESTful en Spring 4.0.2 Release, la solicitud HTTP con la primera parte como datos formateados en XML o JSON y la segunda parte como un archivo se puede lograr con @RequestPart. A continuación se muestra la implementación de muestra.
Fragmento de Java:
El servicio de descanso en Controller habrá mezclado @RequestPart y MultipartFile para atender dicha solicitud Multipart + JSON.
@RequestMapping(value = "/executesampleservice", method = RequestMethod.POST,
consumes = {"multipart/form-data"})
@ResponseBody
public boolean executeSampleService(
@RequestPart("properties") @Valid ConnectionProperties properties,
@RequestPart("file") @Valid @NotNull @NotBlank MultipartFile file) {
return projectService.executeSampleService(properties, file);
}
Fragmento de front-end (JavaScript):
Cree un objeto FormData.
Agregue el archivo al objeto FormData siguiendo uno de los pasos siguientes.
- Si el archivo se ha cargado utilizando un elemento de entrada de tipo "archivo", añádalo al objeto FormData.
formData.append("file", document.forms[formName].file.files[0]);
- Anexe directamente el archivo al objeto FormData.
formData.append("file", myFile, "myfile.txt");
OformData.append("file", myBob, "myfile.txt");
Cree un blob con los datos JSON en cadena y añádalo al objeto FormData. Esto hace que el tipo de contenido de la segunda parte de la solicitud multiparte sea "application / json" en lugar del tipo de archivo.
Envía la solicitud al servidor.
Detalle de la información:
Content-Type: undefined
. Esto hace que el navegador establezca Content-Type en multipart / form-data y complete el límite correctamente. La configuración manual de Content-Type en multipart / form-data no completará el parámetro de límite de la solicitud.
Código Javascript:
formData = new FormData();
formData.append("file", document.forms[formName].file.files[0]);
formData.append('properties', new Blob([JSON.stringify({
"name": "root",
"password": "root"
})], {
type: "application/json"
}));
Pedir detalles:
method: "POST",
headers: {
"Content-Type": undefined
},
data: formData
Solicitar carga útil:
Accept:application/json, text/plain, */*
Content-Type:multipart/form-data; boundary=
Content-Disposition: form-data; name="file"; filename="myfile.txt"
Content-Type: application/txt
Content-Disposition: form-data; name="properties"; filename="blob"
Content-Type: application/json
org.springframework.web.multipart.commons.CommonsMultipartResolver
en su contexto de servlet?