2013-07-17 3 views
1

У меня есть служба JAVA REST, которая возвращает список объектов. Каждый объект содержит имя, описание, код. Я хочу преуменьшать ответ JSONREST - Как минимизировать Json Response

{ 
    "objects": { 
     "count": 10000, 
     "list": [ 
      { 
       "name": "1", 
       "description": "foo", 
       "code": "foo", 
      }, 
      { 
       "name": "2", 
       "description": "bar", 
       "code": "bar", 
      }, 
      ...... (1.000 items) 
     ] 
    } 
} 

К:

{ 
    "a": { 
     "b": 1000, 
     "c": "a:objects,b:count,c:mapping,d:list,e:name,f:description,g:code", 
     "d": [ 
      { 
       "e": "1", 
       "f": "foo", 
       "g": "foo", 
      }, 
      { 
       "e": "2", 
       "f": "bar", 
       "g": "bar", 
      }, 
      ...... (1.000 items) 
     ] 
    } 
} 

как я могу это сделать, спасибо.

+1

Является ли ваш сервис в .NET? Ява? PHP? Это важная информация для этого вопроса. –

+0

извините, моя служба находится в JAVA – DuyHung

+0

Добавить java в теги – Timmerz

ответ

1

Несмотря на то, что мы не знаем, какие конкретные технологии вы используете. Я собираюсь сделать предположение, что вы используете какую-то библиотеку REST, такую ​​как Spring или JaxRS, и вы сериализуете POJO в JSON. Я также сделаю предположение, что у вас есть все настройки и работа для этой конфигурации, и я сконцентрируюсь на выходе, используя эту настройку.

Если вы используете что-то вроде Джексона для POJO, вы можете добавить следующую аннотацию к классу:

public class MyResponseObject { 
    @JsonProperty("a") 
    private MyObject objects; 

    public MyObject getObjects() { return objects; } 
    public void setObjects(MyObject object) { this.objects = object; } 
} 

public class MyObject { 
    @JsonProperty("b") 
    private long count; 
    @JsonProperty("d") 
    private List<Item> list; 

    // getters/setters 
} 

public class Item { 
    @JsonProperty("e") 
    private Sting name; 
    @JsonProperty("f") 
    private String description; 
    @JsonProperty("g") 
    private String code; 

    // getters/setters 
} 

В относительно отображения того, что значит, каждый из них, вы можете жестко/код, сопоставление, но я не думаю, что есть автоматический способ сделать это. Вы также можете указать, что такое сопоставление в JavaDoc для вашего метода. Другой альтернативой является то, что если это API, открытый для других служб, вы можете не только предоставить документацию, но и упакованный Jar с POJO, который выдает API. Таким образом, все, что им нужно сделать, это включить ваш файл jar в качестве зависимости и включить их в сопоставленные классы.

Надеюсь, это поможет вам в правильном направлении.

Кроме того, если вы не используете Джексона, но предпочитают использовать JAXB @XmlElement(name="a")

+0

Может ли это сделать? – BNK

+1

Да, Gson также поддерживает изменение имени поля, аннотируя поле '@SerializedName (" a ")' –

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