2013-07-17 69 views
1

我有一個返回對象列表的JAVA REST服務。每個對象都包含名稱,描述,代碼。 我要來縮小響應JSONREST - 如何縮小Json響應

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

TO:

{ 
    "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中你的服務? Java的? 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,那麼您不僅可以提供文檔,還可以打包一個包含您API所發佈的POJO的Jar。這樣他們所要做的就是將你的jar文件作爲一個依賴項包含在映射的類中。

我希望這可以幫助您指引正確的方向。

另外,如果你不使用傑克遜,但更喜歡使用JAXB @XmlElement(name="a")

+0

Can Gson能做到嗎? – BNK

+1

是的,Gson也支持通過用'@SerializedName(「a」)註釋字段來改變字段名稱' –