2012-01-17 21 views
18

Tengo un objeto que Curently se publica por entregas a:Cómo no envía una colección vacía en Jackson

{ 
    "label" : "label", 
    "proxyIds" : [ ], 
    "childIds" : [ 161, 204, 206, 303, 311 ], 
    "actionIds" : [ 157, 202 ], 
} 

Eso proxyIds es una colección vacía (no nulo) en el objeto java.

¿Cómo configuro a Jackson para no incluir ese objeto en el json en absoluto?

Deseo un comportamiento similar al de las colecciones "unwrapped" en xml/soap donde, si la colección está vacía, no está incluido. No necesito distinguir entre colección nula y vacía y quiero reducir el tamaño de la carga útil json.

Respuesta

13

Esto puede ser una posibilidad remota, pero qué tal si usamos Inclusiones y si definimos NON_DEFAULT como propiedad de inclusión. Los documentos dicen:

"Valor que indica que solo se incluirán las propiedades que tienen valores que difieren de las configuraciones predeterminadas (es decir, los valores que tienen cuando Bean se construye con su constructor sin argumentos)".

Entonces, si el valor predeterminado es un conjunto vacío, debe omitirlo.

Algo así como:

ObjectMapper mapper = new ObjectMapper(); 
mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_DEFAULT); 


public class Test { 
    String[] array = { }; 
    .... 
} 

http://jackson.codehaus.org/1.1.2/javadoc/org/codehaus/jackson/map/annotate/JsonSerialize.Inclusion.html

+0

'String [] array =" ";' no es un código válido. ¿Qué quiso escribir? –

+0

Solucionado, esencialmente desea establecer el valor predeterminado para la matriz vacía. –

+0

nota, desde jackson 2.0, la forma de hacerlo es 'mapper.setSerializationInclusion (Include.NON_DEFAULT);' –

34

Desde Jackson 2.0.0 (25-Mar-2012), también puede utilizar el @JsonInclude annotation para controlar esto en un campo per-o por clase base.

public class MyObject { 

    @JsonInclude(Include.NON_EMPTY) 
    private List<Integer> proxyIds; 

    ... 
} 
+0

En mi humilde opinión, esta debería ser la respuesta correcta. Pero me parece útil mencionar que esta anotación también se puede usar en una clase. En este caso, se aplica a todos los campos. – Simon

+2

Solo una nota, NON_DEFAULT es un subconjunto de NON_EMPTY, el que desee depende de lo que necesite. Si recuerdo correcto, NON_EMPTY también elimina las propiedades de cadenas vacías además de las matrices, mientras que NON_DEFAULT no lo hace. – molholm

Cuestiones relacionadas