JSON数据未在Jersay Web服务中正确显示

时间:2017-01-08 18:23:44

标签: java json web-services jersey

我试图以两种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"
         }
      ]
   }

1 个答案:

答案 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及以下)