如何使用jersey创建接受请求对象中的文件的API?

时间:2014-03-17 19:42:00

标签: java api rest jersey

我正在创建需要接受文件的api以及将在createAppRequest中发送的其他信息。我应该怎么做才能让用户通过apis上传文件。

@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createApp(CreateAppRequest){

// save app to db

}

请求类:

public class CreateAppRequest{

  // Other fields like name, createDate

    @JsonProperty("file")
    @Property("file")
    private byte [] file;

    public byte[] getFile() {
        return file;
    }

    public void setFile(byte[] file) {
        this.file = file;
    }

}

1 个答案:

答案 0 :(得分:1)

我假设你正在使用最新的球衣版(2.7)。

首先,您需要在Jersey中启用MultiPart支持,方法是在pom.xml添加以下内容(如果您使用的是maven,如果没有将添加项添加到您的项目中,则与添加泽西相同):

<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-multipart</artifactId>
  <version>2.7</version>
</dependency>

MultiPart是Jersey功能(例如Jackson功能),这意味着您必须在客户端(如果有的话)和服务器应用程序中注册它。 客户端示例(可选):

final Client client = ClientBuilder.newBuilder()
  .register(MultiPartFeature.class)
  .build();

服务器端示例:

final Application application = new ResourceConfig()
  .packages("your.root.package.here")
  .register(MultiPartFeature.class)

完成上述所有操作后,您可以定义帖子方法,如:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA_TYPE)
public Response createApp(
  @DefaultValue("true") @FormDataParam("enabled") boolean enabled,
  @FormDataParam("data") FileData bean,
  @FormDataParam("file") InputStream file,
  @FormDataParam("file") FormDataContentDisposition fileDisposition) {

    // your code here
}

有关更多信息和示例,请查看官方球衣文档 - https://jersey.java.net/documentation/latest/user-guide.html#multipart


但是,如果您发现整个过程过于复杂,则可以始终将文件作为application/octet-stream放入请求正文中,然后使用MessageBodyReader<T>在post方法中阅读。如果您不确定所有这些是什么意思,或者如何使用它们,请再次查看球衣文档:)