Вот как я реализовал Spring MVC Multipart Request с данными JSON.
Составной запрос с данными JSON (также называемый смешанным составным):
На основе службы RESTful в выпуске Spring 4.0.2 HTTP-запрос с первой частью в виде данных в формате XML или JSON, а второй частью в виде файла может быть выполнен с помощью @RequestPart. Ниже приведен пример реализации.
Фрагмент Java:
Служба отдыха в контроллере будет иметь смешанные @RequestPart и MultipartFile для обслуживания такого запроса 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);
}
Фрагмент внешнего интерфейса (JavaScript):
Создайте объект FormData.
Добавьте файл в объект FormData, используя один из следующих шагов.
- Если файл был загружен с использованием элемента ввода типа «файл», добавьте его в объект FormData.
formData.append("file", document.forms[formName].file.files[0]);
- Непосредственно добавьте файл к объекту FormData.
formData.append("file", myFile, "myfile.txt");
ИЛИ ЖЕformData.append("file", myBob, "myfile.txt");
Создайте большой двоичный объект со строковыми данными JSON и добавьте его в объект FormData. Это приводит к тому, что Content-type второй части в составном запросе будет «application / json» вместо типа файла.
Отправьте запрос на сервер.
Запрос о подробностях:
Content-Type: undefined
. Это заставляет браузер устанавливать Content-Type на multipart / form-data и правильно заполнять границу. Если вручную установить Content-Type на multipart / form-data, не удастся заполнить граничный параметр запроса.
Код 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"
}));
Детали запроса:
method: "POST",
headers: {
"Content-Type": undefined
},
data: formData
Запросить данные:
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
в контексте вашего сервлета?