У меня есть рабочее решение, но кажется глупым, что оно необходимо.
Это мое рабочее решение:
@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
объектом.Я хотел бы, чтобы Spring отображал JSON непосредственно в мой DocumentUploadFileData
класс, не делая это самостоятельно, как показано здесь: DocumentUploadFileData fileDataObj = objectMapper.readValue(fileData, DocumentUploadFileData.class);
Что я пробовал:
- Вместо этогоиз
@RequestPart
Я просто ничего не использовал.Я действительно думал, что это будет хорошо.Не было - Элемент списка
@RequestBody
.Я точно думал, что это сработает.Вместо этого он просто начал кричать на меня о том, что мой контент / тип недействителен?Тип содержимого не изменился, но по какой-то причине он хотел, чтобы это был application / json (хотя я явно говорю multipart / form-data. Я думаю, @ReqestBody
предназначен для запросов application / json и некак играть с multipart? - Я также пытался использовать RequestParam, который на самом деле работает, если я использую String в качестве объекта. Если я пытаюсь использовать вместо него
DocumentUploadFileData
, он терпит неудачу и говорит, что у него нетСтратегия отображения объекта? Я думаю о том, что это многокомпонентный запрос заставляет Spring принять решение об использовании разных картографов, которые, возможно, мне нужно добавить. Я знаю, что многокомпонентные запросы используют границы и вообще немного отличаются, поэтому имеет смысл, что онВозможно, мне нужно другое решение. Я просто не знаю, как это обеспечить.
Я не пользовался Spring уже 3 года, уверен, что решение не такое сложное, однако ядо сих пор не получил его через несколько часов.