2013-05-06 2 views
0

Я пишу успокаивающее обслуживание, используя Джерси и Джексона для де-сериализации. Я использую Spring для инъекций зависимости, я также использую com.sun.jersey.spi.spring.container.servlet.SpringServlet (не используя mvc). Я использую RestyGWT на стороне клиента. Я возвращаю массив объектов из моей службы, мой клиент жалуется, что это не действительный документ JSON. Вот что служба возвращается:Spring-Jersey-Jackson-JSON: Элемент массива, обернутый индексом

{ 
    "0": { 
     "type": "AQUISITION_DT", 
     "value": "2013-2-1", 
     "stats": { 
      "total": 91, 
      "used": 4 
     } 
    }, 
    "1": { 
     "type": "AQUISITION_DT", 
     "value": "2013-1-1", 
     "stats": { 
      "total": 24, 
      "used": 13 
     } 
    } 
} 

Я не уверен, но я думаю, что проблема в том, что каждый элемент обернут по его индексу. Есть ли способ, которым я могу посоветовать Джерси или Джексону развернуть элементы массива? Пожалуйста, дайте мне знать, если мне нужно предоставить дополнительную информацию.

В коде я посылаю результат обратно в JSONWithPadding объект следующим образом: return new JSONWithPadding(array, callback);

Кстати, я уже настроен Джерси в моем web.xml использовать POJO Mapping:

<init-param> 
    <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
    <param-value>true</param-value> 
</init-param> 

UPDATE Я проверил с помощью завитка с терминала, и возвращаемая строка выглядит правильно (я удалил корпус обратного вызова):

{ 
    { 
     "type": "AQUISITION_DT", 
     "value": "2013-2-1", 
     "stats": { 
      "total": 91, 
      "used": 4 
     } 
    }, 
    { 
     "type": "AQUISITION_DT", 
     "value": "2013-1-1", 
     "stats": { 
      "total": 24, 
      "used": 13 
     } 
    } 
} 

Строка, которую я изначально опубликовал, сообщает restyGWT. Извините за запутанный пост, я не уверен, почему restyGwt жалуется ...

Спасибо!

+0

Как вы возвращаете код JSON? – Willy

+0

1) Как сказал Вилли ниже, у вас должны быть квадратные скобки. 2) вы должны вставить свой код на стороне клиента, если хотите, чтобы мы вам помогли. В вашем интерфейсе restService вы получаете свой массив, каков тип вашего обратного вызова? –

ответ

0

Единственный способ, которым я смог обойти эту проблему, состоял в том, чтобы w Рэп результат в объекте. Первоначально я возвращал массив (MyObject[]). Теперь я возвращаюсь MyObjectListing:

public class MyObjectListing { 
    MyObject[] objects; 
    ... 
    //getters/setters, etc. 
} 

возвращение MyObjectListing решает эту проблему ... Я не понимаю, почему.

0

Если вы хотите вернуть массив объектов, формат JSON должен быть, как показано ниже

[ 
    { 
     "type":"AQUISITION_DT", 
     "value":"2013-2-1", 
     "stats":{ 
     "total":91, 
     "used":4 
     } 
    }, 
    { 
     "type":"AQUISITION_DT", 
     "value":"2013-1-1", 
     "stats":{ 
     "total":24, 
     "used":13 
     } 
    } 
] 

Вы можете легко вернуть массив в методе ресурсов как ниже

@Path("/test") 
@GET   
@Produces(MediaType.APPLICATION_JSON) 
public Test[] haha(){ 
    Test[] arr = new Test[3]; 
    arr[0] = new Test(); 
    arr[1] = new Test(); 
    arr[2] = new Test(); 
    return arr; 
} 

Если испытываемый класс как ниже

public class Test { 
    public String type="AQUISITION_DT"; 
    public String value = "2013-2-1"; 
    public Stats stats = new Stats(); 
} 

public class Stats { 
    public int total = 10; 
    public int used = 13; 
} 
Смежные вопросы