2012-04-25 20 views
6

Estamos utilizando JaxRS & Jackson para enviar datos a nuestro cliente. Como el cliente es Javascript, realmente no necesitamos enviar valores nulos o matrices vacías si no hay un valor válido para esa propiedad (lo que JaxRS hace de forma predeterminada). ¿Hay alguna forma de evitar esto?Optimización de JaxRS/Jackson para excluir nulos, listas vacías, matrices

Un ejemplo. JaxRS envía esto:

{"prop1":[],"prop2":null,"prop3":"foo"}

donde podíamos haber salido con la

{"prop3":"foo"}

Respuesta

8

Existen varias formas de lograr esto, dependiendo; la anotación @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) es de una sola dirección. O bien, dado que también desea dejar listas vacías, matrices, cambie NON_NULL a NON_EMPTY.

También es posible configurar esto como el comportamiento predeterminado; en Jackson 1,9:

mapper.setSerializationConfig(mapper.getSerializationConfig().withSerializationInclusion(
    JsonSerialize.Inclusion.NON_EMPTY)); 

y en Jackson 2,0, poco más simple:

mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY); 
+0

Tenga en cuenta que estos métodos son exclusivos de Jackson y no son independientes del proveedor mediante JAX-RS. – Zero3

+0

Sí. Hay pocas configuraciones de configuración estandarizadas para JAX-RS, y no hay anotaciones de clase de valor hasta donde yo sé. – StaxMan

2

En primer lugar de todas las propiedades que caen desde el JSON podría dar lugar a errores o código claro en el lado del cliente - la el lado del cliente tiene que verificar si existe una propiedad dada antes de usarla; si falta la propiedad, se informaría el error de JavaScript. Cosas aburridas.

Dado que la comunicación HTTP tiene gzip, las ganancias potenciales de eliminar propiedades no parecen significativas (puedo estar equivocado, obviamente, no conozco su aplicación). La solicitud GET puede ser efectivamente almacenada en caché, por lo que una razón más para evitar dicha optimización.

Puede personalizar la serialización de objetos Java a JSON según lo necesite. Consulte esta pregunta How can I customize serialization of a list of JAXB objects to JSON? para obtener más explicaciones sobre cómo hacer esto.

+1

Gracias. Era un poco menos honesto acerca de mis intenciones. A decir verdad, comencé con JSON estático muy limpio mientras desarrollaba el cliente, pero como la mayoría de las propiedades en el archivo son opcionales y rara vez se usan, la versión generada por el servidor era muy grande y fea. Probablemente tengas razón, no es un problema de rendimiento real, pero es mucho más difícil de leer de lo que podría ser. Gracias por el enlace. –

Cuestiones relacionadas