我试图以两种JSON格式在Jersey Web服务中获取响应,因为我使用application / json作为@Produces的媒体类型
@produces( application/json )
我的数据样本就像这样
但是在JSON中,它没有像预期的那样正确地进行:
{"menu": [
{
"menuId": "1",
"menuName": "Menu 1",
"subMenu": [
{
"subMenuId": "1",
"subMenuName": "Sub Menu 1"
},
{
"subMenuId": "2",
"subMenuName": "Sub Menu 2"
},
{
"subMenuId": "3",
"subMenuName": "Sub Menu 3"
}
]
},
{
"menuId": "2",
"menuName": "Menu 2"
},
{
"menuId": "3",
"menuName": "Menu 3"
},
{
"menuId": "4",
"menuName": "Menu 4"
},
{
"menuId": "5",
"menuName": "Menu 5",
"subMenu": {
"subMenuId": "4",
"subMenuName": "Sub Menu 1"
}
},
{
"menuId": "6",
"menuName": "Menu 6"
},
{
"menuId": "7",
"menuName": "Menu 7"
},
{
"menuId": "8",
"menuName": "Menu 8",
"subMenu": {
"subMenuId": "5",
"subMenuName": "Sub Menu 1"
}
},
{
"menuId": "9",
"menuName": "Menu 9"
},
{
"menuId": "10",
"menuName": "Menu 10",
"subMenu": {
"subMenuId": "6",
"subMenuName": "Sub Menu 1"
}
}
]}
正如您可以观察到子菜单数据长度为1的地方,其返回错误
{
"menuId": "8",
"menuName": "Menu 8",
***"subMenu": {
"subMenuId": "5",
"subMenuName": "Sub Menu 1"
}***
班级结构
class Menus{
List<Menu> menu;
}
class Menu{
Long menuId;
String menuName;
List<SubMenu> subMenu;
}
class SubMenu{
Long subMenuId;
String subMenuName;
}
我正在使用
@XmlRootElement
以上类和@XmlElement
以上的setter
对于XML输出,数据按预期方式进行,但是在JSON的情况下,List长度为eqaual为1,那么只有我在{}括号内获取数据,但是应该预期它会放在[]括号内像:
{
"menuId": "1",
"menuName": "Menu 1",
"subMenu": [
{
"subMenuId": "1",
"subMenuName": "Sub Menu 1"
},
{
"subMenuId": "2",
"subMenuName": "Sub Menu 2"
},
{
"subMenuId": "3",
"subMenuName": "Sub Menu 3"
}
]
}
答案 0 :(得分:2)
当数组或列表中存在单个元素时,您看到的输出称为BadgerFish处理JSON的方式。
尝试使用Jackson进行Json转换,默认情况下禁用BadgerFish。
添加 Web.xml :
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<强>的pom.xml 强>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-json</artifactId>
<version>1.8</version>
</dependency>
PS:仅适用于Jersey 1.8版本。 (基本上2.x及以下)