簡體   English   中英

如何編寫Jersey Multipart webapp,Tomcat Server

[英]How to write Jersey Multipart webapp, Tomcat Server

我一直在做很多REST教程並享受它們。 最近,我嘗試用Netbeans編寫一個球衣多部分webapp,但我似乎無法,因為它似乎缺少我的球衣庫。

我下載了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的球衣庫中不包含澤西多部件jar文件?

謝謝。

Lutz Horn有一個觀點,但是為了那些使用Netbeans 7.4(Java EE 6)的人並且仍然在努力解決這個問題,這里有一步一步說明如何創建自己的多部分休息Web服務並在Tomcat上部署, Netbeans (注意,在Glassfish上部署需要稍微不同的配置,本答案中未涉及)。

首先,我的建議是創建一個maven Web應用程序而不是一個普通的Web應用程序。 原因是,Java EE 6附帶的JAX-RS和Jersey庫是不夠的,一旦你開始擺弄外部罐子,事情往往會變得混亂,尤其是澤西島。 (希望在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文件夾下找到它)並添加這些依賴項:

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

如果你是第一次這樣做,你需要一個有效的互聯網連接,因為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); 這必須包括在內,否則澤西多部分將不起作用。

我將這行代碼放在getClasses方法而不是addRestResourceClasses方法的原因是因為只要資源類發生更改,addRestResourceClasses方法就會被修改,如果在那里包含MultiPartFeature代碼,它將被刪除。

一旦你完成了所有這些事情,你就會很高興。

如果您只是想創建一個沒有multipart的RESTful Web服務,請按照步驟1到3進行操作,但在步驟3中不要包含jersey-media-multipart依賴項。

我希望這可以幫助你 ;)

這兩個的進口是

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

如果您使用Maven,請添加此依賴項:

    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-multipart</artifactId>
        <version>2.0</version>
        <type>jar</type>
    </dependency>

jersey-media-multipart依賴項一起,而不是Application (見下文),您可以配置ResourceConfig

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

web.xml Jersey REST配置:

<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM