如何编写Jersey Multipart webapp,Tomcat Server

我一直在做很多REST教程并享受它们。 最近,我尝试用Netbeans编写一个jersey多部分webapp,但我似乎无法,因为它似乎缺少我的jersey库。

我下载了jersey-multipart.jar文件,但仍然没有帮助:

@Path("/file") public class UploadFileService { @POST @Path("/upload") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile( @FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) { 

此代码来自博客。 我试图将它放在我的webapp中,但@FormDataParam标记和FormDataContentDisposition类无法识别。 我下载了jersey-multipart.jar,这似乎解决了@FormDataParam标记问题,但没有解决FormDataContentDisposition类。

我正在使用Tomcat 7.0。

如何成功创建一个没有任何问题的泽西多部分webapp? 为什么在Netbeans的jersey库中不包含泽西多部件jar文件?

谢谢。

Lutz Horn有一个观点,但是为了那些使用Netbeans 7.4(Java EE 6)的人并且仍然在努力解决这个问题,这里有一步一步说明如何创建自己的多部分restWeb服务并在Tomcat上部署, Netbeans 。 (注意,在Glassfish上部署需要稍微不同的配置,本答案中未涉及)。

首先,我的建议是创建一个maven Web应用程序而不是一个普通的Web应用程序。 原因是,Java EE 6附带的JAX-RS和Jersey库还不够,一旦你开始摆弄外部jar子,事情往往会变得混乱,尤其是泽西岛。 (希望在Netbeans 8.0(Java EE 7)中已经纠正了这个问题)。

(1)创建一个maven web-app,选择Java EE 6和Tomcat 7.一旦完成,你会发现你没有web.xml。 大多数多部分教程将告诉您在web.xml文件中包含某些配置。 不要为此烦恼。 您不需要web.xml文件。

(2)通过手动编写或使用向导创建RESTfull Web服务(右键单击您的maven web-app – 新建 – 其他 – Web服务 – [选择您想要的RESTful Web服务])

(3)打开你的pom.xml(你可以在maven web-app的Project Files文件夹下找到它)并添加这些依赖项:

   org.glassfish.jersey.containers jersey-container-servlet 2.7   org.glassfish.jersey.media jersey-media-multipart 2.7  

如果你是第一次这样做,你需要一个有效的互联网连接,因为maven将从其中央存储库下载依赖项。

(4)转到ApplicationConfig类或包含@ApplicationPath()的任何类。 它应该如下所示:

 @javax.ws.rs.ApplicationPath("webresources") public class ApplicationConfig extends Application { @Override public Set> getClasses() { Set> resources = new java.util.HashSet>(); resources.add(MultiPartFeature.class); addRestResourceClasses(resources); return resources; } /** * Do not modify addRestResourceClasses() method. * It is automatically populated with * all resources defined in the project. * If required, comment out calling this method in getClasses(). */ private void addRestResourceClasses(Set> resources) { resources.add(com.mycompany.mavenrestuploader.UploaderResource.class); } 

注意: resources.add(MultiPartFeature.class); 必须包含,否则泽西多部分将无法正常工作。

我把这行代码放在getClasses方法而不是addRestResourceClasses方法的原因是因为只要资源类发生了变化就会修改addRestResourceClasses方法,如果在那里包含MultiPartFeature代码,它将被删除。

一旦你完成了所有这些事情,你就会很高兴。

如果您只是想创建没有multipart的RESTful Web服务,请按照步骤1到3进行操作,但在步骤3中不要包含jersey-media-multipart依赖项。

我希望这可以帮助你 ;)

这两个的import是

 import org.glassfish.jersey.media.multipart.FormDataContentDisposition; import org.glassfish.jersey.media.multipart.FormDataParam; 

如果您使用Maven,请添加此依赖项:

   org.glassfish.jersey.media jersey-media-multipart 2.0 jar  

jersey-media-multipart依赖项一起,而不是Application (见下文),您可以配置ResourceConfig

 @ApplicationPath("/") public class AppConfig extends ResourceConfig { public AppConfig() { packages("packages.to.scan"); register(MultiPartFeature.class); } } 

web.xml Jersey REST配置:

  jersey.config.server.provider.classnames org.glassfish.jersey.media.multipart.MultiPartFeature