2012-03-24 1 views
3

Я создаю REST API с JAX-RS. У меня есть POST, потребляющий в JSON элемент:JSON Parsing with JAX-RS

элемент является классом:

@XmlRootElement 
public class EventData{ 
    public long start; 
    public long end; 
    public Collection<Person> persons; 
} 

У меня есть метод, как это:

@POST 
@Consumes({MediaType.APPLICATION_JSON}) 
public Response transactionRequest(EventData insert){ 
....} 

если я отправляю JSON строка с EventData это работает отлично, но если я переключаюсь на:

@POST 
@Consumes({MediaType.APPLICATION_JSON}) 
public Response transactionRequest(ArrayList<EventData> insert){ 
....} 

и отправить JSON строку, как этот "{eventData:[{start:x,end:y,persons:[....]}]" он построит ArrayList и его объекты EventData, но переменными объекта EventData являются null.

Может ли кто-нибудь помочь?

ответ

1

Вам необходимо отправить массив JSON, состоящий из объектов JSON, представляющих ваш класс EventData.

Образец, который вы указали, не является таким массивом JSON, а объектом JSON с единственным свойством с именем «eventData», содержащим массив JSON.

Попробуйте что-то вроде этого (на основе вашего EventData класса):

[ 
    { "start":1, "end":2, "persons":[] }, 
    { "start":3, "end":4, "persons":[] } 
] 

Обратите внимание, что нет никакого упоминания о вашем EventData классе, потому что JSON не имеет ни малейшего понятия о названных типов - это только объекты и массивы объекты; только свойства объектов имеют имена.

+0

com.sun.jersey.json.impl.reader.JsonFormatException: Colon ожидается вместо "]" –

+0

JSON в моем ответе является очень грубым образцом, я предлагаю использовать вывод из метода JAX-RS, который возвращает List с некоторыми фиктивными элементами. Я напишу какой-нибудь действительный JSON с учетом вашего класса EventData' за минуту :) –

+0

Я обновил свой ответ с помощью действительного образца JSON. –