【问题标题】:Java Rest Jersey : Posting multiple types of data (File and JSON)Java Rest Jersey:发布多种类型的数据(文件和 JSON)
【发布时间】:2015-02-22 23:09:14
【问题描述】:

我有一个将发布数据的 Jersey REST 服务。将有一个 CSV 文件,它是实际数据和该 CSV 的一些元数据(元数据可以是 JSON 或 XML 格式)。如果这两个都需要发布,服务的方法签名和伴随注释应该是什么样子,应该是......

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.APPLICATION_JSON})
public CreateTaskVO provideService(@FormParam("meta") String v1,
        @FormParam("data") InputStream v2) {

在这里,我设想第一个参数是元数据的 JSON 字符串,第二个参数是实际数据的输入流。这行得通吗?

【问题讨论】:

    标签: java json rest jersey jax-rs


    【解决方案1】:

    您应该使用一些多部分格式。它基本上由multipart/xxx 类型的单个消息组成(其中xxx 可以类似于form-data),并且该消息由具有自己的内容类型和其他元数据的其他“完整”消息组成。

    您尚未指定 Jersey 版本,但从 Jersey 2.x.x 开始,有可用的多部分支持,以单独工件的形式:

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    

    那么你只需要注册该功能,如here in Registration所见。

    那么你就可以使用@FormDataParam

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Produces({MediaType.APPLICATION_JSON})
    public CreateTaskVO provideService(
                   @FormDataParam("meta") String jsonMeta,
                   @FormDataParam("data") InputStream file,
                   @FormDataParam("data") FormDataContentDisposition fileDetail) {
    

    可以看到here an example客户端发送数据的方式,还有multipart的内部消息体格式

    其他阅读:


    更新

    Jersey 1.x.x 也支持 multipart,以 this artifact 的形式

    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-multipart</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-17
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2014-12-17
      相关资源
      最近更新 更多