在Jersey Rest服务中发送文件和元数据

在Jersey Rest服务中发送文件和元数据,rest,jersey,Rest,Jersey,我需要使用Jersey 2.0创建一个ReST服务。我需要向客户端发送多个文档和元数据。 实现这一目标的最佳方法是什么 我能够从服务器发送一个多部分响应,但不确定如何从客户端代码中读取该响应。假设您有一个名为“document1”的文档,您希望通过客户端获取该文档。 在REST-API中,文档(资源)的唯一标识符可以是: 当您想要读取数据时,您对该uri执行HTTP-GET请求。 下面是对您来说很重要的一部分:资源可以有多种表示形式—在您的案例中有元数据和二进制数据 因此,客户机必须告诉服务器

我需要使用Jersey 2.0创建一个ReST服务。我需要向客户端发送多个文档和元数据。 实现这一目标的最佳方法是什么


我能够从服务器发送一个多部分响应,但不确定如何从客户端代码中读取该响应。假设您有一个名为“document1”的文档,您希望通过客户端获取该文档。 在REST-API中,文档(资源)的唯一标识符可以是:

当您想要读取数据时,您对该uri执行HTTP-GET请求。 下面是对您来说很重要的一部分:资源可以有多种表示形式—在您的案例中有元数据和二进制数据

因此,客户机必须告诉服务器要获取哪种表示类型(内容协商)。例如,可以在客户端请求的ACCEPT头中设置此信息。 您可以使用内容类型“application/json”作为元数据的表示形式

不幸的是,您没有告诉我们您要发送哪种二进制数据。 如果它们是pdf,那么内容类型将是“application/pdf”。如果二进制数据没有特定类型,可以使用“应用程序/八位字节流”

当然,在服务器端也有工作要做。这里有一个例子:

@Path("/documents/{documentname}")
public class docResource {

    @GET @Produces("application/json")
    public Response getDocumentMetaData(@PathParam("documentname") String docName) {
        // Create a Response containing a json
    }
    @GET @Produces("application/pdf")
    public Response getDocumentBinaryData(@PathParam("documentname") String docName) {
        // Create a response containing the binary data
    }

    ...
}
Jersey将检查客户端的accept头并运行适当的方法。 另见:

如果您与jackson一起使用jersey,您还可以轻松地将POJO封送至JSON,反之亦然:

如果您不确定在“getDocumentBinaryData”方法中执行什么操作,请从mkyong签出这个简单示例:

web服务可以在一个请求/响应中返回document1和document2。我们怎么能做到呢。任何指针都会帮上大忙的。