我有一个基于球衣的Web服务,它会生成“多部分/混合”响应,如下所示:该方法读取一个文件,并应以八位字节格式返回它。同样,它读取该文件的元数据,并以json形式返回它们。
方法:
@GET
@Produces("multipart/mixed")
public Multipart getDocumentContents(@Context HttpHeaders header){
....
....
....
os = new ByteArrayOutputStream();
....
....
MultiPart multiPartEntity = new MultiPart()
.bodyPart(new BodyPart(os.toByteArray(), MediaType.APPLICATION_OCTET_STREAM_TYPE));
return multiPartEntity;
}
我的问题是出现以下对我来说没有意义的错误:
A message body writer for Java class com.sun.jersey.multipart.MultiPart, and Java type class com.sun.jersey.multipart.MultiPart, and MIME media type multipart/mixed was not found
06.08.2013 15:32:06 com.sun.jersey.spi.container.ContainerResponse write
SCHWERWIEGEND: The registered message body writers compatible with the MIME media type are:
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProvider$General
com.sun.jersey.core.impl.provider.entity.ReaderProvider
com.sun.jersey.core.impl.provider.entity.DocumentProvider
com.sun.jersey.core.impl.provider.entity.StreamingOutputProvider
com.sun.jersey.core.impl.provider.entity.SourceProvider$SourceWriter
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$General
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$General
com.sun.jersey.json.impl.provider.entity.JSONWithPaddingProvider
com.sun.jersey.server.impl.template.ViewableMessageBodyWriter
com.sun.jersey.core.impl.provider.entity.XMLRootElementProvider$General
com.sun.jersey.core.impl.provider.entity.XMLListElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$General
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$General
com.sun.jersey.json.impl.provider.entity.JacksonProviderProxy
据我所知,os.toByteArray()将我的对象转换为Byte数组。
任何的想法?
编辑:我正在使用泽西岛1.15
最佳答案
该错误消息告诉您两件事:
找不到Java类com.sun.jersey.multipart.MultiPart的消息正文编写器
这是因为jersey试图将MultiPart类型转换为二进制表示形式,该形式可以通过电线发送回客户端
找不到MIME媒体类型multipart / mixed
这表示multipart / mixed不是有效的媒体类型
MediaType Java类型对于每个接受的媒体类型都有常量...您可以使用@Produces(MediaType.MULTIPART_FORM_DATA),但这不是您想要的
我认为一个解决方案(不是睾丸)可能是:
1-为每个要返回的文件定义一个包含byte []的自定义类型,类似于(使用lombok)
@XmlRootElement(name="returnedFiles")
@Accessors(prefix="_")
@NoArgsConstructor
public class ReturnedFiles {
@XmlElement(name="file1Contents")
@Getter @Setter private byte[] _file1Contents;
@XmlElement(name="file1Name")
@Getter @Setter private String _file1Name;
@XmlElement(name="file1Contents")
@Getter @Setter private byte[] _file2Contents;
@XmlElement(name="file1Name")
@Getter @Setter private String _file2Name;
}
2-重新定义您的方法
@GET @Path("{myPath}")
@Produces(MediaType.APPLICATION_XML)
public Response getDocumentContents(@Context HttpHeaders header) {
... load the files and compose the ReturnedFiles instance
return Response.ok()
.entity(returnedFilesInstance)
.build();
}
关于java - Jersey (REST)响应,带有多个部分/与多个 body 部位混合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18081982/