2013-02-06 4 views
5

Buduję JSON z drzewa obiektów Java przy użyciu Jackson ObjectMapper. Niektóre z moich obiektów Java są kolekcjami i czasami mogą być puste. Więc jeśli są puste, to ObjectMapper generuje mnie: "attributes": [], i chcę wykluczyć takie puste tablice JSON z mojego wyniku. Mój obecny ObjectMapper config:Wyklucz puste tablice z obiektu Jackson ObjectMapper

SerializationConfig config = objectMapper.getSerializationConfig(); 
config.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL); 
config.set(SerializationConfig.Feature.WRAP_ROOT_VALUE, true); 

Od this post Czytałem, że mogę używać:

config.setSerializationInclusion(JsonSerialize.Inclusion.NON_DEFAULT); 

Ale to przynosi mi błąd:

Caused by: java.lang.IllegalArgumentException: Class com.mycomp.assessments.evaluation.EvaluationImpl$1 has no default constructor; can not instantiate default bean value to support 'properties=JsonSerialize.Inclusion.NON_DEFAULT' annotation. 

Więc jak mam zapobiec te puste tablice, które pojawią się w moim wyniku?

Odpowiedz

9

Należy użyć:

config.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY); 

Jackson 1 lub

config.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); 

dla Jackson 2

+0

Używam Jackson: 1.8.5, ale nie ma takiej opcji: JsonSerialize. Includsion.NON_EMPTY. Jest tylko: ZAWSZE, NON_NULL, NON_DEFAULT –

+0

Naprawiono typ (Włączenie zamiast Incudsion), ale potrzebujesz przynajmniej Jackson 1.9, aby go użyć Obawiam się. – jgm

+0

Dzięki, zaktualizowałem wersję Jacksona i to jest teraz w porządku :) –