2015-10-21 7 views
0

При разработке веб-службы я создаю метод GET, чтобы вернуть список объектов системы JSON (пользовательский объект, а не тип java.lang). Против ожиданий я получаю объект JSON с 1 параметром, содержащим массив, который я изначально ожидал. Что мне здесь не хватает?Список объектов, возвращаемых как объект JSON

системы класса

@XmlRootElement 
public class System 
{ 
    private long id; 
    private String name; 

    @XmlElement 
    public long getId() 
    { 
     return id; 
    } 
    public void setId(long pId) 
    { 
     id = pId; 
    } 

    @XmlElement 
    public String getName() 
    { 
     return name; 
    } 

    public void setName(String pName) 
    { 
     name = pName; 
    } 
} 

REST сервис

@Path("/systems") 
public class SystemHandler 
{ 
    @GET 
    @Path("/list") 
    @Produces({MediaType.APPLICATION_JSON}) 
    public List<System> getSystems(@Context SecurityContext sc) 
    { 
     List<System> list = null; 
     //Populate the list 
     return list; 
    } 
} 

Результат/системы/список

{ 
    "system": [ 
     { 
      "id": "248", 
      "name": "FOO" 
     }, 
     { 
      "id": "617", 
      "name": "BAR" 
     } 
    ] 
} 

В то время как я ожидал

[ 
    { 
     "id": "248", 
     "name": "FOO" 
    }, 
    { 
     "id": "617", 
     "name": "BAR" 
    } 
] 
+0

Я не знаю источник проблемы, но ее оболочка JSON, у меня то же самое в моем случае, и вы можете использовать ключ '' system '' путем выполнения '@XmlRootElement (name =" my_system ") 'например. – Maraboc

+0

Вы используете Glassfish с Джерси? –

+0

@Maraboc Спасибо, что подумали обо мне. Это действительно изменяет ключ на «my_system», но он не удаляет его. Также не переименовывает класс –

ответ

0

Извлеките аннотацию @XmlRootElement, это говорит Джексону обматывать список в системном свойстве и не требуется.

+0

Удаление. Это приводит к ошибке: SEVERE: автор сообщения для Java-класса java.util.ArrayList и Java-тип java.util.List и MIME application/json не найден Кроме того, аннотация XmlRootElement отлично работает и с другими классами. Спасибо за вашу мысль. –

+0

Ах, в этом случае, похоже, что Джексон (или что-то еще используется для маршалирования java для json) не настроен для отображения бобах по умолчанию. Как уже прокомментировали другие комментарии, знаете ли вы, какой стек технологий построен? Обычно это было бы без проблем, но похоже, что вам нужно немного больше конфигурации. –

Смежные вопросы