我使用Jhipster,这是一个控制器方法:
控制器:
@RequestMapping(value = UPLOAD_URL, method = {RequestMethod.POST},
headers = {"content-type=multipart/mixed", "content-type=multipart/form-data"},
consumes = {"multipart/form-data"})
public ResponseEntity<?> uploadWithMetaData(@RequestPart(value = "file") MultipartFile file,
@RequestPart(value = "documentDTO") DocumentDTO documentDTO,
Locale locale) throws IOException, URISyntaxException, JSONException {
// business logic
}
基本上我想发布一个文件和一个json对象。
我的集成测试,我可以验证它是否按预期工作:
整合测试:
DocumentDTO documentDTO = getDocumentDTOMockFile();
Long originId = originRepository.findAll().stream().findFirst().get().getId();
documentDTO.setOriginId(originId);
MockMultipartFile jsonFile = new MockMultipartFile("documentDTO", "", "application/json",
jsonUtils.toJson(documentDTO, null).getBytes());
restClientMockMvc
.perform(MockMvcRequestBuilders.fileUpload("/api/v1/documents/upload")
.file(fstmp)
.file(jsonFile))
.andDo(MockMvcResultHandlers.log())
.andExpect(status().isOk());
}
角度前端:
let fd: FormData = new FormData();
let file = fileForm.files[0];
fd.append("file", file);
let documentDTO = JSON.stringify(document);
fd.append("documentDTO",new Blob([JSON.stringify({
"documentDTO": documentDTO})], {
type: "application/json"
})
);
his.httpClient.post("/api/v1/documents/upload", fd ).subscribe(request => {
console.log("request", request);
});
我有一个拦截器,它将请求标头中的内容类型设置为:
内容-类型:多部分/格式的数据;边界= ---- WebKitFormBoundary4PnIOSOLe5Djj95R
这是Request有效负载的样子:
这是春季启动日志消息:
由Handler执行引起的已解决异常:org.springframework.web.multipart.support.MissingServletRequestPartException:必需的请求部分&#39; file&#39;不存在
这是我在浏览器中看到的响应:
{
"type" : "http://www.jhipster.tech/problem/problem-with-message",
"title" : "Bad Request",
"status" : 400,
"detail" : "Required request part 'file' is not present",
"path" : "///api/v1/documents/upload",
"message" : "error.http.400"
}
我尝试过的事情:
我有想法,有人有什么建议吗?
答案 0 :(得分:2)
从JavaScript发布为多部分表单并使用以下内容:
final WebRequest webRequest,
@RequestParam("fileContent") final MultipartFile fileContent,
@RequestParam("inputJson") String inputJsonString
作为参数。
如果您需要访问会话,WebRequest
非常有用。