Java Rest Jersey:发布多种类型的数据(文件和JSON)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Rest Jersey:发布多种类型的数据(文件和JSON)相关的知识,希望对你有一定的参考价值。

我有一个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字符串,第二个参数是实际数据的输入流。这会有用吗?

答案

你应该使用一些多部分格式。它基本上由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如何从客户端发送数据,以及多部分的内部消息体格式

其他阅读:


UPDATE

在此工件的形式中,还支持Jersey 1.x.x中的multipart

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

以上是关于Java Rest Jersey:发布多种类型的数据(文件和JSON)的主要内容,如果未能解决你的问题,请参考以下文章

Jersey REST api 多种资源

笔记:Jersey REST 传输格式

笔记:Jersey REST 传输格式-JSON

Jersey Rest服务类型

带有 XML 参数的 REST 服务操作上的 HTTP 错误 415 不受支持的媒体类型(Jersey + Jetty)

在 JSON 响应中返回文件/文件 (Java-Jersey-ReST)