2010-06-05 10 views
10

Estoy tratando de convertir el objeto java al objeto JSON en Tomcat/jersey usando Jackson. Y desea suprimir la serialización (escritura) de ciertas propiedades dinámicamente.Jackson - supresión de serialización (escritura) de propiedades dinámicamente

Puedo usar JsonIgnore, pero quiero hacer la decisión de ignorar en tiempo de ejecución. ¿¿Algunas ideas??

Así como un ejemplo a continuación, quiero suprimir campo "id" cuando me serializar el objeto Usuario a JSON ..

new ObjectMapper.writeValueAsString(user); 


class User { 

private String id = null; 
private String firstName = null; 
private String lastName = null; 

//getters 
//setters 

}//end class 

Respuesta

0

no veo ninguna manera de hacer eso. Si necesita decidir dinámicamente qué propiedades se organizan, entonces le sugiero que construya manualmente un Map de claves para los valores de sus objetos, y luego pase ese Map a Jackson, en lugar de pasar el objeto User directamente.

+0

gracias. Creo que el patrón Map también es un poco débil cuando se trata de crear matrices JSON. Mapa map1 = new HashMap (); map1.put ("fname", "Steve"); map1.put ("lname", "Colly"); \t \t Map map2 = new HashMap (); map2.put ("fname", "Josh"); map2.put ("lname", "Roff"); Lista jsonArray = new ArrayList(); jsonArray.add (map1); jsonArray.add (map2); new ObjectMapper(). WriteValueAsString (jsonArray) ... no produce ??? [{'fname': 'Steve', 'lname': 'Colly'}, {'fname': 'Josh', 'lname': 'Roff'}] – kapso

+0

@ kapil.isr: Sí, lo hace, I lo intenté, funciona bien. El orden de las teclas es diferente, pero eso se debe a que usaste un 'HashMap' en lugar de un' LinkedHashMap'. – skaffman

+0

o sí funciona, lo siento, error tipográfico :) muchas gracias !! – kapso

2

Comprobar

ObjectMapper.configure(SerialiationJson.Feature f, boolean value) 

y

org.codehaus.jackson.annotate.JsonIgnore 

anotación

Esto funciona sólo cuando se desea todas las instancias de un determinado tipo de ignorar Identificación en la serialización. Si realmente quieres la dinámica (también conocida como personalización por instancia) probablemente tendrás que hackear la biblioteca de jackson tú mismo.

0

¿Ha intentado utilizar JSON Views? Las vistas permiten un mecanismo basado en anotaciones para definir diferentes perfiles, por lo que si solo necesita vistas ligeramente diferentes para diferentes usuarios, esto podría funcionar para usted.

Cuestiones relacionadas