Как использовать RESTEasy Client-Proxy с MultipartFile - PullRequest
0 голосов
/ 08 июня 2018

Я пытался в течение нескольких дней использовать RESTEasy Client-Proxy с многочастными формами.

В лучшем случае я хотел бы передать MultipartFile в Прокси.Например,

//client:
//Resteasy proxy creation left out for brevity

public Response add(MultipartFile versionFile) {
   proxy.add(versionFile);
}

//server (interface):

@POST
@Consumes({MediaType.MULTIPART_FORM_DATA})
FormularDTO add(MultipartFile versionFile);

. Это всегда заканчивается исключением.

could not find writer for content-type multipart/form-data type: org.springframework.web.multipart.support

. Как указано в Документах, существует два способа обработки Multipart-Files:

a)MultipartOutput/MultipartInput:

Что я должен отправить через прокси?Если я отправлю MultipartOutput, я получу то же исключение.MultipartInput is Abstract.

b) Использовать DTO с @MultipartForm Решение, используемое в настоящее время в проекте, но требующее сопоставления всех метаданных файла, создания нового DTO и т. Д.

См. Пример ниже:

//DTO
public class MultipartFileDataDTO {

    @FormParam("file")
    @PartType(MediaType.APPLICATION_OCTET_STREAM)
    private InputStream file;

    @FormParam("contentType")
    @PartType(MediaType.TEXT_PLAIN)
    private String contentType;

     ...
}

//Server-Interface
@POST
@Consumes({MediaType.MULTIPART_FORM_DATA})
FormularDTO add(@MultipartForm MultipartFileDataDTO versionFile);

//Client-Mapping
MultipartFileDataDTO upload = new MultipartFileDataDTO();
upload.setFile(versionFile.getInputStream());
upload.setContentType(versionFile.getContentType());
...

Мой вопрос: Какой самый простой способ «передать» MultipartFile через сгенерированный RESTEasy-Client-Proxy?

1 Ответ

0 голосов
/ 17 октября 2018

Я думаю, что самый простой способ сделать это - создать простой объект MultiplartFormDataOutput и отправить его на прокси.

Вот простой пример:

MultipartFormDataOutput output = new MultipartFormDataOutput();
// It is possible to pass a File object or a InputStream in the addFormData
output.addFormData("file", fileObject, MediaType.APPLICATION_OCTET_STREAM_TYPE, filename);
proxy.add(output)
...