Как написать веб-приложение 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>