我尝试了几天使用带有Multipart表单的RESTEasy客户端代理。
在最好的情况下,我想将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
为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());
...
我的问题:通过"传递"最简单的方法是什么?通过生成的RESTEasy-Client-Proxy创建MultipartFile?
答案 0 :(得分:1)
我认为最简单的方法是创建一个简单的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)