Как не отправлять пустую коллекцию в jackson
У меня есть объект, который последовательно сериализуется:
{
"label" : "label",
"proxyIds" : [ ],
"childIds" : [ 161, 204, 206, 303, 311 ],
"actionIds" : [ 157, 202 ],
}
Этот proxyIds представляет собой пустую (не нулевую) коллекцию в объекте java.
Как настроить Jackson для того, чтобы вообще не включать этот объект в json?
Мне нужно поведение, подобное "распакованным" коллекциям в xml/soap, если коллекция пуста, она не включена. Мне не нужно различать нулевую и пустую коллекцию и хочу уменьшить размер полезной нагрузки json.
Ответы
Ответ 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;
...
}