一尘不染

如何编写Jersey Multipart Webapp,Tomcat服务器

tomcat

我一直在做很多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文件?

谢谢。


阅读 250

收藏
2020-06-16

共1个答案

一尘不染

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
依赖项。

我希望这可以帮助你 ;)

2020-06-16