我有一个可行的解决方案,但这似乎很愚蠢。
这是我的工作解决方案:
@PreAuthorize("isAuthenticated()")
@ApiOperation(value = "Takes in a document.", nickname = "Document Upload", response = DocumentResponse[].class)
@ResponseStatus(HttpStatus.ACCEPTED)
@RequestMapping(
value = "/api/v1/document/upload",
produces = "application/json",
consumes = "multipart/form-data",
method = RequestMethod.POST)
public DocumentResponse uploadDocument(
// THIS is where I am using a String and don't want to.
@RequestPart("fileData") String fileData,
@RequestPart("file") MultipartFile file,
@RequestHeader("idempotency-id") String idempotencyId) throws IOException {
// THIS is the line I would also like to avoid.
DocumentUploadFileData fileDataObj = objectMapper.readValue(fileData, DocumentUploadFileData.class);
printBeanValues(fileDataObj);
More after....
问题在于fileData
是String
对象。我希望将JSON直接映射到我的DocumentUploadFileData
类,而不必自己做,如此处所示:DocumentUploadFileData fileDataObj = objectMapper.readValue(fileData, DocumentUploadFileData.class);
我尝试过的:
@RequestPart
而不是。我实际上认为那会很好。不是。 @RequestBody
。我以为肯定可以。相反,它只是开始对我大吼大叫我我的内容/类型无效?内容类型没有改变,但是由于某种原因,它希望它是application / json(即使我明确地说是multipart / form-data。我猜@ReqestBody
是针对application / json请求的,它并没有不喜欢多人演奏吗?DocumentUploadFileData
代替它失败,并告诉我它没有该对象的映射策略?我认为这是一个多部分请求的事实,使Spring决定使用可能需要添加的不同映射器?我知道多部分请求使用边界,并且通常只是有些不同,因此可以使用不同的解决方案是有意义的。我只是不知道该怎么提供。 我已经有3年没有使用Spring了,我确定解决方案不是那么复杂,但是,几个小时后我仍然没有得到它。
答案 0 :(得分:1)
尝试采用此处指出的以下解决方案:Spring MVC Multipart Request with 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);
}