Получение Spring для отображения при получении JSON вместе с файлом, используя multipart / form-data или multipart / mixed - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть рабочее решение, но кажется глупым, что оно необходимо.

Это мое рабочее решение:

@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);

Что я пробовал:

  1. Вместо этогоиз @RequestPart Я просто ничего не использовал.Я действительно думал, что это будет хорошо.Не было
  2. Элемент списка @RequestBody.Я точно думал, что это сработает.Вместо этого он просто начал кричать на меня о том, что мой контент / тип недействителен?Тип содержимого не изменился, но по какой-то причине он хотел, чтобы это был application / json (хотя я явно говорю multipart / form-data. Я думаю, @ReqestBody предназначен для запросов application / json и некак играть с multipart?
  3. Я также пытался использовать RequestParam, который на самом деле работает, если я использую String в качестве объекта. Если я пытаюсь использовать вместо него DocumentUploadFileData, он терпит неудачу и говорит, что у него нетСтратегия отображения объекта? Я думаю о том, что это многокомпонентный запрос заставляет Spring принять решение об использовании разных картографов, которые, возможно, мне нужно добавить. Я знаю, что многокомпонентные запросы используют границы и вообще немного отличаются, поэтому имеет смысл, что онВозможно, мне нужно другое решение. Я просто не знаю, как это обеспечить.

Я не пользовался Spring уже 3 года, уверен, что решение не такое сложное, однако ядо сих пор не получил его через несколько часов.

1 Ответ

0 голосов
/ 01 февраля 2019

Попробуйте принять следующее решение, указанное здесь: Spring MVC Multipart Request с 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);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...