記一次未解決的異常:java.lang.NoClassDefFoundError: net/sf/json/JSONObject


原因:Jetty會導致這個問題,Tomcat可以正常啟動
 
一、異常產生現象
使用json-lib轉換實體類/字符串,跑單元測試沒問題,但是啟動jetty后調用 JSONArray.fromObject(data) 就會拋標題中異常
 
二、嘗試解決的步驟
1、網上有的說tomcat存在此問題,需要將jar包拷貝到tomcat目錄,容器用的是jetty,所以不是這個原因 (未解決)

2、json-lib需要引入其它庫,如圖所示,引入后單元測試可以跑通,但是jetty啟動還是拋異常(未解決)
    
 
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其他庫的版本問題,將圖中下半部分的版本改成和上半部分一樣,還是拋異常(未解決)

 

三、最終替代方案: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;
     }
}

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM