javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/json/JSONObject

javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/json/JSONObject

我在 IntelliJ 中有一个简单的 Java class,如下所示:

import javax.ws.rs.*;
import javax.ws.rs.core.*;
import java.io.*;
import java.util.List;

@Path("/hello")
public class Hello {
     @GET
     @Path("/{param}")
     public Response getMsg(@PathParam("param") String msg) {
          String output = "Jersey say : " + msg;
          return Response.status(200).entity(output).build();
   }
@POST
@Path("/jsonRequest")
@Produces(MediaType.APPLICATION_JSON)
public Response getJson(String url) throws InterruptedException, IOException 
{
    JSONObject json= JSONInteraction.readJsonFromUrl(url);
    Response.ResponseBuilder response = Response.ok(json);
    return response.build();
}
}

我还为 json 添加了一个 Maven 依赖项,如下所示:

 <!-- https://mvnrepository.com/artifact/org.json/json -->
 <dependency>
      <groupId>org.json</groupId>
      <artifactId>json</artifactId>
      <version>20180130</version>
 </dependency>

我的 war 文件部署如下所示:

在我启动服务器并部署项目后,即使添加了所有依赖项,我仍然得到 javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: org/json/JSONObject 当我尝试在 POSTMAN 上 运行 POST 请求。我在执行 GET 请求时得到了正确的结果,因为它与 JSON.

无关

我几乎阅读了所有 Whosebug 解决方案,但 none 对我有所帮助。有人可以帮我解决这个问题吗?欢迎提出任何建议。

请做:

  • 检查您是否在 WAR 中添加了 json 库 - 解压您的 WAR 并检查里面是否是 json-20180130.jar
  • 检查你的服务器 Classloader 是否不包含任何其他带有 org.json.JSONObject class 的 jar(对于 Tomcat:{CATALINA_HOME}/lib)- 如果包含和这个您的服务器的安装包中没有提供 JAR,请删除它 - 它可能与从您的 WAR
  • 加载的 class 冲突
  • 仔细阅读应用程序启动期间创建的服务器日志:请搜索有关 classloader 中重复 classes 问题、加载 JAR 失败等问题的任何信息

如果没有帮助,请添加:

  • pom.xml
  • 整个堆栈跟踪
  • 您的 servlet 容器的名称和版本