一尘不染

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

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字符串,第二个参数是实际数据的输入流。这行得通吗?


阅读 258

收藏
2020-07-27

共1个答案

一尘不染

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

您尚未指定哪个Jersey版本,但是从Jersey 2.xx开始,存在单独的工件形式的多部分支持:

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

然后,您只需要注册功能,如注册中所示

那你就可以用 @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) {

其他重读:


更新

工件的形式在Jersey 1.xx中也支持多部分

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