我有一个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)组成,并且该消息由其他具有自己的内容类型和其他元数据的“完整”消息组成。
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
@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) {
其他重读:
multipart/form-data
更新
此 工件的形式在Jersey 1.xx中也支持多部分
<dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-multipart</artifactId> <version>${jersey.version}</version> </dependency>