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.xx开始,可以使用单个工件的forms提供多部分支持:

  org.glassfish.jersey.media jersey-media-multipart ${jersey.version}  

然后您只需要注册该function,如注册中所示 。

然后你可以使用@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 Multipart支持的一般信息
  • 有关multipart/form-data一般信息
  • JAX-RS发布多个对象

UPDATE

Jersey 1.xx中还支持multipart, 以此工件的forms

  com.sun.jersey.contribs jersey-multipart ${jersey.version}