Подтвердить что ты не робот

Как не отправлять пустую коллекцию в jackson

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

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

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

Как настроить Jackson для того, чтобы вообще не включать этот объект в json?

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

4b9b3361

Ответ 1

Это может быть длинный снимок, но как насчет использования включений и определения 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

Ответ 2

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

public class MyObject {

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

    ...
}