2011-08-06 18 views
22

Estoy buscando una manera de convertir directamente un POJO a un Jackson TreeModel. Sé que existe una traducción de POJO a JSON-String, y TreeModel-to-JSON-String es compatible - hovewer Estoy buscando una traducción POJO-to-TreeModel. ¿Hay alguna manera?Jackson: ¿hay alguna forma de serializar POJO directamente a treemodel?

El caso de uso es el siguiente:

  • plantillas del lado del servidor se realiza con la implementación en Java de bigote. Esto usa el TreeModel de Jackson.
  • Después de eso, necesito una versión reducida del TreeModel en el lado del cliente, así que quiero poder filtrar primero TreeModel, serializar eso en JSON y luego enviarlo al lado del cliente para su posterior procesamiento .

Esto, idealmente, implica dos pasos de serialización. Sin embargo, en mi solución, actualmente estoy usando tres, que se pueden ver aquí:

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

¿Alguien?

+0

Otra sugerencia rápida: en lugar de utilizar StringWriter, acaba de hacer 'mapper.writeValueAsString()' (o, para obtener byte [], 'writeValueAsBytes()') – StaxMan

+0

@StaxMan: gracias. Código ya actualizado :) –

Respuesta

36

para responder a mi propia pregunta:

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

De hecho. Y, en general, 'ObjectMapper.convertValue (sourceOb, dstType)' se puede usar para varias conversiones, incluido POJO en caso de árbol. – StaxMan

+2

Parece que ObjectMapper.valueToTree no se agregó hasta la versión 1.6, por lo que la alternativa 'ObjectMapper.convertValue (sourceObj, JsonNode.class)' de @StaxMan es genial para aquellos de nosotros que aún no hemos actualizado. –

Cuestiones relacionadas