Java 休息 Jersey : Posting multiple types of data (File and JSON)

标签 java json rest jersey jax-rs

我有一个 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如何从客户端发送数据,以及多部分的内部消息体格式

其他阅读:


更新

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

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

关于Java 休息 Jersey : Posting multiple types of data (File and JSON),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27643558/

相关文章:

spring - 路径变量 spring Restful 服务中的 URL

java - 如何使用 JsonFormat 装饰通用类型字段

java - Scala 中的 Spark 代码可以转换为 Java 吗?

java - 如何延迟加载图片而不是等待它在 Java 中完成下载?

java - HashMap 数组列表 (java)

c# - 使用 JSON 响应测试 WCF

c# - 使用 Newtonsoft 创建无效的 Json - 允许无效的对象?

json - SuperObject - 全部提取

java - Jersey 更新实体属性 MessageBodyWriter

rest - 查找 REST API 上未记录的函数