2011-08-06 37 views
22

Tôi đang tìm cách chuyển trực tiếp một số POJO thành Jackson TreeModel. Tôi biết rằng một bản dịch từ POJO-sang-JSON-String tồn tại, và TreeModel-to-JSON-String được hỗ trợ - hovewer Tôi đang tìm bản dịch POJO-to-TreeModel. Là có một cách?Jackson: có cách nào để tuần tự hóa POJO trực tiếp tới treemodel không?

Việc sử dụng hợp cụ thể như sau:

  • Server-side khuôn mẫu được thực hiện với việc thực hiện Java của Moustache. Điều này sử dụng TreeModel của Jackson.
  • Sau đó, tôi cần một phiên bản rút gọn của TreeModel ở phía máy khách, vì vậy tôi muốn có thể lọc TreeModel đầu tiên, tuần tự hóa thành JSON, sau đó gửi nó cho phía máy khách để xử lý tiếp .

Điều này lý tưởng nhất là liên quan đến hai bước tuần tự hóa. Tuy nhiên, trong giải pháp của tôi, tôi hiện đang sử dụng ba - bạn có thể xem tại đây:

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(); 

Bất kỳ ai?

+0

Một gợi ý nhanh khác: thay vì sử dụng StringWriter, chỉ cần làm 'mapper.writeValueAsString()' (hoặc, để có được byte [], 'writeValueAsBytes()') – StaxMan

+0

@StaxMan: cảm ơn. Mã đã được cập nhật :) –

Trả lời

36

để trả lời câu hỏi của riêng tôi:

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

Thật vậy. Và nói chung, 'ObjectMapper.convertValue (sourceOb, dstType)' có thể được sử dụng cho các chuyển đổi khác nhau, bao gồm POJO đến trường hợp cây. – StaxMan

+2

Có vẻ như ObjectMapper.valueToTree chưa được thêm cho đến phiên bản 1.6, do đó, 'ObjectMapper.convertValue (sourceObj, JsonNode.class)' thay thế từ @StaxMan là rất tốt cho những người trong chúng ta chưa nâng cấp! –

Các vấn đề liên quan