2011-08-06 78 views
22

我正在尋找一種方法將一些POJO直接轉換爲Jackson TreeModel。我知道從POJO到JSON-String的翻譯存在,並且支持TreeModel到JSON-String - 我正在尋找POJO到TreeModel的翻譯。有沒有辦法?Jackson:有沒有辦法將POJO直接序列化爲treemodel?

使用情況如下:

  • 服務器端模板與Java實現鬍子完成。這使用了Jackson的TreeModel。
  • 之後,我需要在客戶端上減少TreeModel的版本,所以我希望能夠先過濾TreeModel,將其序列化爲JSON,然後將其發送到客戶端以供進一步處理。

這,理想情況下,涉及兩個序列化步驟。但是,在我的解決方法中,我目前使用三種 - 您可以在此處看到:

map = // a map of pojos with jackson annotations 

//pojo >> JSON 
StringWriter w = new StringWriter();  
objectmapper.writeValue(new JsonFactory().createJsonGenerator(w), map); 
String json = w.toString(); 
w.close(); 

//JSON >> Treemodel 
JsonNode tree = GenericJcrDTO.mapper.readTree(json); 
//filter tree here 

//treemodel >>JSON 
StringWriter w = new StringWriter(); 
GenericJcrDTO.mapper.writeValue(new JsonFactory().createJsonGenerator(w), tree); 
json = w.toString(); 
w.close(); 

有人嗎?

+0

另外一個快速的建議:而不是使用StringWriter的,只是做 'mapper.writeValueAsString()'(或者,得到的byte [], 'writeValueAsBytes()') – StaxMan

+0

@StaxMan:謝謝。代碼已經更新:) –

回答

36

回答我的問題:

JsonNode node = objectMapper.valueToTree(map); 
+2

確實。一般來說,'ObjectMapper.convertValue(sourceOb,dstType)'可用於各種轉換,包括POJO到樹的情況。 – StaxMan

+2

似乎ObjectMapper.valueToTree直到1.6版本才被添加,因此@StaxMan中的'ObjectMapper.convertValue(sourceObj,JsonNode.class)'替代方案對於我們尚未升級的人來說是非常棒的! –

相關問題