이것이 JSON 데이터로 Spring MVC Multipart Request를 구현 한 방법입니다.
JSON 데이터가 포함 된 멀티 파트 요청 (혼합 멀티 파트라고도 함) :
Spring 4.0.2 Release의 RESTful 서비스를 기반으로 첫 번째 부분은 XML 또는 JSON 형식의 데이터로, 두 번째 부분은 파일로 HTTP 요청은 @RequestPart로 수행 할 수 있습니다. 다음은 샘플 구현입니다.
자바 스 니펫 :
Controller의 Rest 서비스에는 이러한 Multipart + JSON 요청을 처리하기 위해 @RequestPart와 MultipartFile이 혼합되어 있습니다.
@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);
}
프런트 엔드 (자바 스크립트) 스 니펫 :
FormData 개체를 만듭니다.
아래 단계 중 하나를 사용하여 FormData 개체에 파일을 추가합니다.
- 파일이 "file"유형의 입력 요소를 사용하여 업로드 된 경우 FormData 객체에 추가합니다.
formData.append("file", document.forms[formName].file.files[0]);
- 파일을 FormData 개체에 직접 추가합니다.
formData.append("file", myFile, "myfile.txt");
또는formData.append("file", myBob, "myfile.txt");
문자열 화 된 JSON 데이터로 Blob을 만들고 FormData 개체에 추가합니다. 이로 인해 다중 파트 요청에서 두 번째 파트의 컨텐츠 유형이 파일 유형 대신 "application / json"이됩니다.
서버에 요청을 보냅니다.
요청 세부 정보 :
Content-Type: undefined
. 이로 인해 브라우저는 Content-Type을 multipart / form-data로 설정하고 경계를 올바르게 채 웁니다. Content-Type을 multipart / form-data로 수동 설정하면 요청의 경계 매개 변수를 채우지 못합니다.
자바 스크립트 코드 :
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
서블릿 컨텍스트에서 를 지정 했습니까 ?