我正在创建需要接受文件的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;
}
}
答案 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方法中阅读。如果您不确定所有这些是什么意思,或者如何使用它们,请再次查看球衣文档:)