Как написать веб-приложение Jersey Multipart, сервер Tomcat

Я делал много уроков по REST и получал от них удовольствие. Недавно я попытался написать многочастное веб-приложение на основе джерси с Netbeans, но я не могу этого сделать, потому что кажется, что-то не хватает моей библиотеки джерси.

Я скачал файл 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) {

Этот код из блога. Я пытаюсь поместить его в мое веб-приложение, но тег @FormDataParam и класс FormDataContentDisposition не распознаются. Я скачал jersey-multipart.jar, и это, похоже, решило проблему с тегом @FormDataParam, но не с классом FormDataContentDisposition.

Я использую Tomcat 7.0.

Как мне без проблем создать успешное веб-приложение из нескольких частей? И как получается, что файл jar-multipart jar не включен в библиотеку jersey в Netbeans?

Благодарю.

3 ответа

Решение

У Lutz Horn есть точка зрения, но ради тех, кто использует Netbeans 7.4 (Java EE 6) и все еще борются с этой проблемой, вот шаг за шагом о том, как создать свой собственный многопользовательский веб-сервис для отдыха и развертывания на Tomcat с помощью Netbeans. (Обратите внимание, что для развертывания на Glassfish требуется немного другая конфигурация, которая не рассматривается в этом ответе).

Прежде всего, я предлагаю создать веб-приложение maven, а не обычное веб-приложение. Причина в том, что библиотек JAX-RS и Jersey, которые поставляются с Java EE 6, недостаточно, и как только вы начинаете возиться с внешними банками, вещи, как правило, запутываются, особенно с Джерси. (Надеюсь, это было исправлено в Netbeans 8.0 (Java EE 7)).

(1) Создайте веб-приложение maven, выберите Java EE 6 и Tomcat 7. Как только вы закончите, вы заметите, что у вас нет web.xml. В большинстве многоплановых руководств вам будет предложено включить определенные конфигурации в ваш файл web.xml. Не беспокойся об этом. Вам не нужен файл web.xml.

(2) Создайте веб-службу RESTfull, написав ее вручную или с помощью мастера (щелкните правой кнопкой мыши на веб-приложении maven - "Создать" - "Другое" - веб-службы - [выберите веб-службу RESTful, которую вы хотите])

(3) Откройте файл pom.xml (вы можете найти его в папке " Файлы проекта " в своем веб-приложении maven) и добавьте следующие зависимости:

        <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, он будет удален.

Как только вы сделали все эти вещи, вы можете идти.

Если вы просто хотите создать веб-сервис RESTful без multipart, выполните шаги с 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:

<init-param>
    <param-name>jersey.config.server.provider.classnames</param-name>
    <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value>
</init-param>
Другие вопросы по тегам