Для этого вы можете использовать аннотации с настраиваемым фильтром. В настраиваемом фильтре вы можете полностью опустить свойство списка, когда весь набор MyChildPojo
объектов - это просто оболочка.
Аннотировать MyChildPojo
класс с
@JsonInclude(value = JsonInclude.Include.NON_EMPTY, valueFilter = EmptyListFilter.class)
public class MyChildPojo {
...
}
И определить EmptyListFilter
что-то вроде следующего
public class EmptyListFilter {
@Override
public boolean equals(Object obj) {
if (obj == null || !(obj instanceof List)) {return false;}
Optional<Object> result = ((List)obj).stream().filter(
eachObj -> Arrays.asList(eachObj.getClass().getDeclaredFields()).stream().filter(eachField -> {
try {
eachField.setAccessible(true);
if ( eachField.get(eachObj) != null && !eachField.get(eachObj).toString().isEmpty()) {
return true;
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}).count() > 0).findAny();
return !result.isPresent();
}
}
Пример использует следующие зависимости от Java:8
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.11.0'
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.4'