我一直在做很多REST教程并喜欢它们。最近,我尝试用Netbeans编写一个jersey的多部分web应用程序,但是我似乎无法这样做,因为似乎我的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) {
此代码来自博客。我试图将其放入我的Web应用程序中,但是无法识别@FormDataParam标记和FormDataContentDisposition类。我下载了jersey- multipart.jar,这似乎可以解决@FormDataParam标记问题,但不能解决FormDataContentDisposition类。
我正在使用Tomcat 7.0。
如何顺利创建没有问题的jersey多部分web应用程序?为何Netbeans的jersey库中不包含jersey-multipart jar文件?
谢谢。
Lutz Horn讲了一点,但是对于那些使用Netbeans 7.4(Java EE 6)并仍在努力解决此问题的人来说,这是一步一步地介绍如何创建自己的多部分rest Web服务并在Tomcat上进行部署,以及 Netbeans 。(请注意,在Glassfish上进行部署需要稍有不同的配置,此答案中未涉及)。
首先,我的建议是创建一个Maven Web应用程序,而不是普通的Web应用程序。原因是,Java EE 6附带的JAX- RS和Jersey库还不够用,一旦您开始使用外部jar摆弄,事情就会变得混乱,尤其是对于Jersey。(希望在Netbeans 8.0(Java EE 7)中已更正此问题。)
(1)创建一个maven Web应用程序,选择Java EE 6和Tomcat7。完成后,您会发现您没有web.xml。大多数多部分教程将告诉您在web.xml文件中包括某些配置。不要理会。您不需要web.xml文件。
(2)通过手动编写或使用向导创建RESTfull Web服务(右键单击您的maven Web应用-新建-其他-Web服务-[选择所需的RESTful Web服务])
(3)打开pom.xml(可以在maven Web应用程序的 Project Files文件 夹下找到它)并添加以下依赖项:
<dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>2.7</version> </dependency>
如果您是第一次这样做,则需要有效的Internet连接,因为maven将从其中央存储库下载依赖项。
(4)转到您的 ApplicationConfig 类或任何包含@ApplicationPath()的类。它看起来应该像这样:
@javax.ws.rs.ApplicationPath("webresources") public class ApplicationConfig extends Application { @Override public Set<Class<?>> getClasses() { Set<Class<?>> resources = new java.util.HashSet<Class<?>>(); 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<Class<?>> resources) { resources.add(com.mycompany.mavenrestuploader.UploaderResource.class); }
注意: resources.add(MultiPartFeature.class); 这必须包括在内,否则Jersey的多重部分将无法工作。
我将这行代码放入getClasses方法而不是addRestResourceClasses方法的原因是因为只要资源类发生更改,addRestResourceClasses方法都会被修改,并且如果其中包含MultiPartFeature代码,它将被删除。
一旦完成所有这些事情,就可以开始了。
如果您只是想创建不带多部分的RESTful Web服务,请执行步骤1至3,但在步骤3中不要包括 jersey-media-multipart 依赖项。
我希望这可以帮助你 ;)