jersey 是oracle 出的一个较好的REST框架。使用此框架方便地为我们架设Rest服务。它可以作为一个数据接口的框架,根据配置及请求参数,可灵活地返回不同格式的数据。
若不会搭建,亲参考站内的如何搭建请参考《如何搭建jersey的REST应用》文章。
本人在使用jersey框架中遇到一个问题比较棘手,就是当以json格式返回数组,同时数组中元素只有一个时,返回json格式数据不是我们期望的。错误现象如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
{ "ResultCode" : "00000" ,
"ResultDesc" : "成功" ,
"Count" : "4" ,
"PageCount" : "4" ,
"CountInPage" : "1" ,
"PageIndex" : "1" ,
"Languages" : {
"Language" : {
"PKID" : "7" ,
"Name" : "国语" ,
"Description" : "国语"
}
}
} |
以上是单个数据时,框架返回的json数据,我们期望的是Language数组,而不是Language对象。
当返回的数组中是多个数据(即本示例中返回多个语言)时,返回格式正常。正确现象如下:
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
|
{ "ResultCode" : "00000" ,
"ResultDesc" : "成功" ,
"Count" : "4" ,
"PageCount" : "2" ,
"CountInPage" : "3" ,
"PageIndex" : "1" ,
"Languages" : {
"Language" : [
{
"PKID" : "7" ,
"Name" : "国语" ,
"Description" : "国语"
},
{
"PKID" : "8" ,
"Name" : "0" ,
"Description" : "0"
},
{
"PKID" : "9" ,
"Name" : "中文" ,
"Description" : "中文"
}
]
}
} |
解决方案:
在web.xml中Jersey的拦截器进行配置,增加 org.codehaus.jackson.jaxrs 参数值,样例如下:
见证奇迹的时刻到了:)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
{ "ResultCode" : "00000" ,
"ResultDesc" : "成功" ,
"Count" : 4,
"PageCount" : 4,
"CountInPage" : 1,
"PageIndex" : 1,
"Languages" : {
"Language" : [
{
"PKID" : 7,
"Name" : "国语" ,
"Description" : "国语"
}
]
}
} |
以上内容希望对大家有帮助。