原因: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;
}
}
|