2017-01-08 8 views
0

Я пытаюсь получить ответ на вебе-службе Джерси в обоих формате JSON Fo, что я с помощью приложения/JSON в качестве типа носителя для @ProducesJSON данные правильно не пришедшие в вебе-службе Jersay

@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 выше сеттеров

Для вывода 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

Есть ли у вас какие-либо объектные сопоставители с пользовательскими свойствами, заданными в конфигурации вашего трикотажа? –

+0

@BandiKishore Kishore Нет У меня нет – Rohitesh

+0

Вы используете Джексон в качестве своего json-конвертера? –

ответ

2

вы видите выход называется BadgerFish способ обработки JSON, когда один элемент присутствует в массиве или списке.

Попробуйте использовать Джексон для преобразования 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: Это для только Джерси 1.8 версии. (В основном 2.x и ниже)

+1

Bandi Kishore большое спасибо, что он работает для меня – Rohitesh

+0

@Rohiteh Great! можете ли вы принять ответ и закрыть вопрос? –