gpt4 book ai didi

java - 使用 Jersey 2 和 Jetty 上传文件

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:54 25 4
gpt4 key购买 nike

  • 大家好。

我使用 Jersey 2 开发了一个通过 RESTful API 在 Jetty 上运行的 Web 服务。后来我不得不创建一个文件上传方法(主要针对 XLS/XML 文件),并尝试使用 Jersey 2 的 Multipart 库。

但是,当服务器启动时,它立即抛出一个奇怪的异常:

2016-09-21 01:13:13.578:INFO:oejs.AbstractConnector:main: Started ServerConnector@17f62e33{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}
Exception in thread "main" java.lang.NoClassDefFoundError: org/glassfish/jersey/internal/inject/ExtractorException
at org.glassfish.jersey.media.multipart.internal.FormDataParamValueFactoryProvider.createValueFactory(FormDataParamValueFactoryProvider.java:436)

[................................................]

jetty 服务器

public static void main(String[] args) {

final ResourceConfig resourceConfig = new ResourceConfig(API.class);
resourceConfig.packages("the_package_where_these_classes_are");
resourceConfig.register(MultiPartFeature.class);

ServletHolder jerseyServlet
= new ServletHolder(new ServletContainer(resourceConfig));

Server jettyServer = new Server(8080);
ServletContextHandler context = new ServletContextHandler(jettyServer, "/");
context.addServlet(jerseyServlet, "/*");

try {
jettyServer.start();
jettyServer.join();
} catch (Exception e) {
e.printStackTrace();
} finally {
//jettyServer.destroy();
// got an IllegalStateException uncommenting this and didn't quite understand why
}
}

端点/ Jersey /JAX-RS

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

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import java.io.InputStream;


@Path("/")
public class API {

@POST
@Path("test")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetails) throws Exception {


System.out.println(fileDetails.getFileName());
return Response.ok().build();
}
}

应用程序配置

import org.glassfish.jersey.media.multipart.MultiPartFeature;

import javax.ws.rs.core.Application;
import java.util.Set;

public class ApplicationConfig extends Application {

@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> resources = new java.util.HashSet<>();
resources.add(MultiPartFeature.class);
resources.add(API.class);

return resources;
}
}

Maven 依赖项

<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.3.11.v20160721</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-multipart -->
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.23.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-multipart</artifactId>
<version>2.23.2</version>
</dependency>

</dependencies>

我是否使用了错误的依赖项?这个简单的服务不应该起作用吗?我以前从未使用过 Multipart,因此我尝试引用几个互联网资源/教程。

提前致谢!

已修复

我将所有 Jersey 依赖项的版本更改为最新版本,并且成功了!

最佳答案

jersey-media-multipart 依赖于 jersey-common ,添加

    <dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>2.23.2</version>
</dependency>

关于java - 使用 Jersey 2 和 Jetty 上传文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39605670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com