2017-04-25 57 views
0

所以我有一個項目類,它看起來像這樣(額外的東西除外):傑克遜序列化對象的字符串

{ 
"id": 1, 
"item": "something", 
"account": { 
    "id": 5, 
    "name": "somename" 
     } 
} 

我想業主自來水出現例如像這樣

{ 
"id": 1, 
"item": "something", 
"account": "somename" 
} 

我知道如何通過改變Item在Jackson中的序列化方式來做到這一點,但是如果我要改變序列化Item的方式,我將不得不包括它所有的額外字段,Item也是基類,所以我必須做還有所有的孩子班級,這是太多的工作(或者是,不知道如果任何人有一個eas y解決方案如何序列化一個字段幷包含所有其他字段)。所以我的問題是我可以序列化Account類並使其返回一個簡單的String(不是json對象或類似的東西)。 我試着與JsonGenerator周圍工作,使它看起來相似,但我必須到目前爲止最好的是:

{ 
"id": 1, 
"item": "something", 
"account": {"account":"somename"} 
} 

謝謝!

+1

分享你的代碼,建議任何變化 –

+0

檢查這個答案,如果你的作品?http://stackoverflow.com/questions/43200410/如何到寫嵌套JSON-使用傑克遜/ 43202327#43202327 –

回答

0

從頭開始,我發現我的錯誤是,我總是開始: jsonGenerator.writeStartObject(); ,並以: jsonGenerator.writeEndObject(); 它本身使它返回一個對象。我所要做的只是使用writeString方法。

0

我想你想要的是來自Jackson的@JsonIdentityInfo。

該註解允許您指定子實體在父實體中的序列化方式。

下面是一個例子:

@JsonIdentityInfo(generator=ObjectIdGenerators.PropertyGenerator.class, property="productDescription") 
@JsonIdentityReference(alwaysAsId=true) // otherwise first ref as POJO, others as id 
private Product product; 

這告訴傑克遜,該產品bean應當使用它的「產品描述」字段被序列化。

您還可以查看本教程:

http://www.baeldung.com/jackson-annotations