当前位置: 首页 > 知识库问答 >
问题:

多部分/混合多个车身部件的Jersey(REST)响应

满耀
2023-03-14

我有一个基于泽西的网络服务,它产生一个“多部分/混合”响应如下:该方法读取一个文件,并应以八位字节格式返回。此外,它读取该文件的元数据,并以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()正在将我的对象转换为字节数组。

任何想法?

编辑:我正在使用Jersey 1.15

共有1个答案

傅恺
2023-03-14

错误消息会告诉您两件事:

Java类com的消息体编写器。太阳运动衫多部分。找不到多部分

这是因为jersey正在尝试将多部分类型转换为二进制表示,可以通过线路发送回客户端

找不到MIME媒体类型multipart/mixed

这表示多部分/混合不是有效的媒体类型

MediaType java类型具有每个接受的媒体类型的常量...MULTIPART_FORM_DATA)但这不是你想要的

我认为解决方案(不是测试)应该是:

1-为每个要返回的文件定义一个包含字节[]的自定义类型,类似于(使用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();
}
 类似资料:
  • 我需要向我的Spring控制器发送一个带有json的文件。我有以下控制器类: 但当我在服务器上使用以下命令时: 我得到415不支持的媒体类型! 有线索吗?

  • 我想写一个REST服务,它用一个zipFile和一些json数据来响应,所有的东西都在一个多部分/混合请求中。 现在我尝试使用多部分/混合响应并返回一个MultiValueMap MyMultiValueMap存在以防止类型擦除(泛型)。 这给出了

  • 问题内容: 我收到对我需要解析的http请求的响应。响应的一部分是pdf文件,我需要将其保存到磁盘。有图书馆可以帮我吗? 问题答案: 这是我在常规操作中所做的。所需的Java邮件库:

  • 有一个只接受内容类型multipart/mixed的REST API。 正在尝试使用restTemplate并生成内容类型为multipart/mixed的REST请求。如果注释setContentType restTemplate默认为多部分/表单数据。 但运气不好,举个例子,我如何调用API生成多部分/混合请求? 也许这个有帮助

  • 我试图编写完整的多部分流,从客户端使用Spring restTemplate发送多部分请求,从服务器端自动将不同部分解析为对象(我使用JAXB进行对象封送),并以多部分形式返回响应。 我能够实现几乎所有的流,但是我不能从spring Controller中用jaxb对象发送多部分响应。 试图使he FormHttpMessageConverter正确地编写部分,但这没有帮助 是否有任何方法使Spr

  • 我在谷歌上搜索了很长时间,但没有答案。我希望有人能帮助我。 比方说,我在jersey服务器端收到了一个多部分/混合包,其结构如下: 前两个 bodypart 可以通过使用 bodypart.getEntityAs(Class clazz) 方法轻松处理。但是对于嵌套的多部分,我只能获得一个BodyPartEntity,并通过它获得一个输入流。显然,通过输入流获取图像名称和图像正文并不容易。那么,我