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

时间:2018-02-17 07:27:46

标签: java json maven intellij-idea war

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

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文件部署如下所示:

enter image description here

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

我已经阅读了几乎所有StackOverflow解决方案但没有帮助。有人可以帮我解决这个问题吗?欢迎任何建议。

1 个答案:

答案 0 :(得分:1)

请做:

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

如果没有任何帮助,请添加:

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