Ось як я реалізував Spring MVC Multipart Request із даними JSON.
Багаточастинний запит із даними JSON (також званий змішаним багаточастинним):
На основі служби RESTful у версії 4.0.2, HTTP-запит із першою частиною як дані у форматі XML або JSON, а з другою частиною як файл можна отримати за допомогою @RequestPart. Нижче наведено зразок реалізації.
Фрагмент Java:
Служба відпочинку в Controller буде мішати @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. Це спричиняє тип вмісту другої частини у багаточастинному запиті "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
у своєму контексті сервлету?