gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:16:02 28 4
gpt4 key购买 nike

我正在创建需要接受文件和其他信息的 API,这些信息将在 createAppRequest 中发送。我需要对我的 api 做什么才能让用户通过 api 上传文件。

@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;
}

}

最佳答案

我假设您使用的是最新的 Jersey 版本 (2.7)。

首先,您需要通过将以下内容添加到 pom.xml 中启用 Jersey 中的 MultiPart 支持。 (如果您使用maven,如果没有像添加 Jersey 一样将依赖项添加到您的项目中):

<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 方法,例如:

@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
}

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

<小时/>

但是,如果您发现整个过程太复杂,您可以随时将文件放入请求正文中,如 application/octet-stream然后在您的 post 方法中使用 MessageBodyReader<T> 读取它。如果您不确定所有这些意味着什么,或者如何使用它们,请再次查看 Jersey 文档:)

关于java - 如何使用 jersey 创建接受请求对象中的文件的 API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22463845/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com