Đây là cách tôi triển khai Yêu cầu đa phần Spring MVC với Dữ liệu JSON.
Yêu cầu đa phần với dữ liệu JSON (còn được gọi là Đa phần hỗn hợp):
Dựa trên dịch vụ RESTful trong Bản phát hành Spring 4.0.2, yêu cầu HTTP với phần đầu tiên là dữ liệu được định dạng XML hoặc JSON và phần thứ hai dưới dạng tệp có thể đạt được với @RequestPart. Dưới đây là thực hiện mẫu.
Đoạn mã Java:
Dịch vụ khôi phục trong Bộ điều khiển sẽ có @RequestPart và MultipartFile hỗn hợp để phục vụ yêu cầu 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);
}
Đoạn mã giao diện người dùng (JavaScript):
Tạo một đối tượng FormData.
Nối tệp vào đối tượng FormData bằng một trong các bước dưới đây.
- Nếu tệp đã được tải lên bằng phần tử đầu vào thuộc loại "tệp", thì hãy nối tệp đó vào đối tượng FormData.
formData.append("file", document.forms[formName].file.files[0]);
- Nối trực tiếp tệp vào đối tượng FormData.
formData.append("file", myFile, "myfile.txt");
HOẶC LÀformData.append("file", myBob, "myfile.txt");
Tạo một đốm màu với dữ liệu JSON được xâu chuỗi và nối nó vào đối tượng FormData. Điều này khiến Kiểu nội dung của phần thứ hai trong yêu cầu nhiều phần là "ứng dụng / json" thay vì loại tệp.
Gửi yêu cầu đến máy chủ.
Yêu cầu chi tiết:
Content-Type: undefined
. Điều này khiến trình duyệt đặt Loại-Nội dung thành nhiều phần / biểu mẫu-dữ liệu và điền chính xác ranh giới. Việc đặt Content-Type thành nhiều phần / biểu mẫu-dữ liệu theo cách thủ công sẽ không điền được thông số ranh giới của yêu cầu.
Mã 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"
}));
Yêu cầu chi tiết:
method: "POST",
headers: {
"Content-Type": undefined
},
data: formData
Yêu cầu tải trọng:
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
trong ngữ cảnh servlet của mình chưa?