Как не отправить пустую коллекцию в Джексоне - PullRequest
19 голосов
/ 17 января 2012

У меня есть объект, который в настоящий момент сериализуется в:

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

Этот proxyIds является пустой (не нулевой) коллекцией в объекте java.

Как настроить Джексона нане включать этот объект в JSON вообще?

Мне нужно поведение, подобное "развернутым" коллекциям в xml / soap, где, если коллекция пустая, она не включается.Мне не нужно различать пустую и пустую коллекцию, и я хочу уменьшить размер полезной нагрузки json.

Ответы [ 2 ]

36 голосов
/ 28 апреля 2015

Начиная с версии Jackson 2.0.0 (25 марта 2012 г.), вы также можете использовать аннотацию @JsonInclude для управления этим для каждого поля или класса.

public class MyObject {

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

    ...
}
14 голосов
/ 18 января 2012

Это может быть далеко, но как насчет использования Включений и определения NON_DEFAULT в качестве свойства включения.В документах сказано:

"Значение, которое указывает, что должны быть включены только те свойства, значения которых отличаются от настроек по умолчанию (то есть значений, которые они имеют, когда Bean создается с помощью конструктора без аргументов)."

Таким образом, если значение по умолчанию - пустой массив, его следует пропустить.

Что-то вроде:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...