记一次未解决的异常:java.lang.NoClassDefFoundError: net/sf/json/JSONObject


一、异常产生现象
使用json-lib转换实体类/字符串,跑单元测试没问题,但是启动jetty后调用 JSONArray.fromObject(data) 就会抛标题中异常

二、尝试解决的步骤
1、网上有的说tomcat存在此问题,需要将jar包拷贝到tomcat目录,容器用的是jetty,所以不是这个原因 (未解决)
http://blog.csdn.net/yeqiuzs/article/details/45097063

2、json-lib需要引入其它库,如图所示,引入后单元测试可以跑通,但是jetty启动还是抛异常(未解决)
http://stackoverflow.com/questions/11567383/java-runtime-classnotfoundexception
     记一次未解决的异常:java.lang.NoClassDefFoundError: net/sf/json/JSONObject_第1张图片
3、项目中用到了commons-lang3,考虑和commons-lang 2.5是否存在兼容性问题,删除commons-lang3后还是抛异常(未解决)
1
2
3
4
5
< dependency >
             < groupId >org.apache.commons</ groupId >
             < artifactId >commons-lang3</ artifactId >
             < version >3.4</ version >
         </ dependency >

4、考虑是不是json-lib其他库的版本问题,将图中下半部分的版本改成和上半部分一样,还是抛异常(未解决)

记一次未解决的异常:java.lang.NoClassDefFoundError: net/sf/json/JSONObject_第2张图片


三、最终替代方案:fastjon

原因如下:

1、阿里巴巴开源,质量和效率有保障

2、不依赖其它jar包

3、使用简单,满足要求


pom依赖:

1
2
3
4
5
< dependency >
      < groupId >com.alibaba</ groupId >
      < artifactId >fastjson</ artifactId >
      < version >1.2.7</ version >
</ dependency >

工具类代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import java.util.ArrayList;
import java.util.List;
 
import com.alibaba.fastjson.JSON;
 
/**
  * Json工具类
  *
  */
public class JsonUtil {
     /**
      * 字符串转换为实体类
      *
      */
     public static <T> T StringToEntity(String str, Class<T> classT) {
         T t = JSON.parseObject(str, classT);
         return t;
     }
 
     /**
      * 字符串转换为实体集合
      *
      */
     public static <T> ArrayList<T> StringToEntityList(String str, Class<T> classT) {
         List<T> lst = JSON.parseArray(str, classT);
         return (ArrayList<T>) lst;
     }
 
     /**
      * 实体类转换为字符串
      *
      */
     public static <T> String EntityToString(T data) {
         String str = JSON.toJSONString(data);
         return str;
     }
}





来自为知笔记(Wiz)


你可能感兴趣的:(记一次未解决的异常:java.lang.NoClassDefFoundError: net/sf/json/JSONObject)