如何解决jersey框架中以json格式返回数组,当数组中元素一个时json格式不对

时间:2022-06-20 01:35:51

原文地址:http://www.cnblogs.com/swpk/p/3566536.html?utm_source=tuicool

jersey 是oracle 出的一个较好的REST框架。使用此框架方便地为我们架设Rest服务。它可以作为一个数据接口的框架,根据配置及请求参数,可灵活地返回不同格式的数据。

若不会搭建,亲参考站内的如何搭建请参考《如何搭建jersey的REST应用》文章。

  本人在使用jersey框架中遇到一个问题比较棘手,就是当以json格式返回数组,同时数组中元素只有一个时,返回json格式数据不是我们期望的。错误现象如下:

{
"ResultCode": "",
"ResultDesc": "成功",
"Count": "",
"PageCount": "",
"CountInPage": "",
"PageIndex": "",
"Languages": {
"Language": {
"PKID": "",
"Name": "国语",
"Description": "国语"
}
}
}

以上是单个数据时,框架返回的json数据,我们期望的是Language数组,而不是Language对象。

当返回的数组中是多个数据(即本示例中返回多个语言)时,返回格式正常。正确现象如下:

{
"ResultCode": "",
"ResultDesc": "成功",
"Count": "",
"PageCount": "",
"CountInPage": "",
"PageIndex": "",
"Languages": {
"Language": [
{
"PKID": "",
"Name": "国语",
"Description": "国语"
}
]
}
}

解决方案:

在web.xml中Jersey的拦截器进行配置,增加 org.codehaus.jackson.jaxrs 参数值,样例如下:

如何解决jersey框架中以json格式返回数组,当数组中元素一个时json格式不对

见证奇迹的时刻到了:)

{
"ResultCode": "",
"ResultDesc": "成功",
"Count": 4,
"PageCount": 4,
"CountInPage": 1,
"PageIndex": 1,
"Languages": {
"Language": [
{
"PKID": 7,
"Name": "国语",
"Description": "国语"
}
]
}
}

以上内容希望对大家有帮助。