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