diff options
Diffstat (limited to 'src/main/java/com/fasterxml/jackson/databind/ser')
7 files changed, 188 insertions, 33 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/BasicSerializerFactory.java b/src/main/java/com/fasterxml/jackson/databind/ser/BasicSerializerFactory.java index 889a72470..d37ef546c 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/BasicSerializerFactory.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/BasicSerializerFactory.java @@ -11,6 +11,7 @@ import java.util.concurrent.atomic.AtomicReference; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonIncludeProperties; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.cfg.SerializerFactoryConfig; @@ -823,7 +824,11 @@ public abstract class BasicSerializerFactory beanDesc.getClassInfo()); Set<String> ignored = (ignorals == null) ? null : ignorals.findIgnoredForSerialization(); - MapSerializer mapSer = MapSerializer.construct(ignored, + JsonIncludeProperties.Value inclusions = config.getDefaultPropertyInclusions(Map.class, + beanDesc.getClassInfo()); + Set<String> included = (inclusions == null) ? null + : inclusions.getIncluded(); + MapSerializer mapSer = MapSerializer.construct(ignored, included, type, staticTyping, elementTypeSerializer, keySerializer, elementValueSerializer, filterId); ser = _checkMapContentInclusion(prov, beanDesc, mapSer); diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializer.java index 501f16d7f..b202b47f6 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializer.java @@ -68,6 +68,10 @@ public class BeanSerializer super(src, toIgnore); } + protected BeanSerializer(BeanSerializerBase src, Set<String> toIgnore, Set<String> toInclude) { + super(src, toIgnore, toInclude); + } + // @since 2.11.1 protected BeanSerializer(BeanSerializerBase src, BeanPropertyWriter[] properties, BeanPropertyWriter[] filteredProperties) { @@ -120,6 +124,11 @@ public class BeanSerializer return new BeanSerializer(this, toIgnore); } + @Override + protected BeanSerializerBase withIgnorals(Set<String> toIgnore, Set<String> toInclude) { + return new BeanSerializer(this, toIgnore, toInclude); + } + @Override // @since 2.11.1 protected BeanSerializerBase withProperties(BeanPropertyWriter[] properties, BeanPropertyWriter[] filteredProperties) { diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java index 07a969208..81c494dee 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/BeanSerializerFactory.java @@ -3,6 +3,7 @@ package com.fasterxml.jackson.databind.ser; import java.util.*; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonIncludeProperties; import com.fasterxml.jackson.annotation.ObjectIdGenerator; import com.fasterxml.jackson.annotation.ObjectIdGenerators; import com.fasterxml.jackson.annotation.JsonTypeInfo.As; @@ -23,6 +24,7 @@ import com.fasterxml.jackson.databind.type.ReferenceType; import com.fasterxml.jackson.databind.util.BeanUtil; import com.fasterxml.jackson.databind.util.ClassUtil; import com.fasterxml.jackson.databind.util.Converter; +import com.fasterxml.jackson.databind.util.IgnorePropertiesUtil; /** * Factory class that can provide serializers for any regular Java beans @@ -635,17 +637,25 @@ public class BeanSerializerFactory // just use it as is. JsonIgnoreProperties.Value ignorals = config.getDefaultPropertyIgnorals(beanDesc.getBeanClass(), beanDesc.getClassInfo()); + Set<String> ignored = null; if (ignorals != null) { - Set<String> ignored = ignorals.findIgnoredForSerialization(); - if (!ignored.isEmpty()) { - Iterator<BeanPropertyWriter> it = props.iterator(); - while (it.hasNext()) { - if (ignored.contains(it.next().getName())) { - it.remove(); - } + ignored = ignorals.findIgnoredForSerialization(); + } + JsonIncludeProperties.Value inclusions = config.getDefaultPropertyInclusions(beanDesc.getBeanClass(), + beanDesc.getClassInfo()); + Set<String> included = null; + if (inclusions != null) { + included = inclusions.getIncluded(); + } + if (included != null || (ignored != null && !ignored.isEmpty())) { + Iterator<BeanPropertyWriter> it = props.iterator(); + while (it.hasNext()) { + if (IgnorePropertiesUtil.shouldIgnore(it.next().getName(), ignored, included)) { + it.remove(); } } } + return props; } diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.java index 2abf7649d..86b16366d 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.java @@ -67,7 +67,11 @@ public class BeanAsArraySerializer } protected BeanAsArraySerializer(BeanSerializerBase src, Set<String> toIgnore) { - super(src, toIgnore); + this(src, toIgnore, null); + } + + protected BeanAsArraySerializer(BeanSerializerBase src, Set<String> toIgnore, Set<String> toInclude) { + super(src, toIgnore, toInclude); _defaultSerializer = src; } @@ -112,6 +116,11 @@ public class BeanAsArraySerializer return new BeanAsArraySerializer(this, toIgnore); } + @Override + protected BeanAsArraySerializer withIgnorals(Set<String> toIgnore, Set<String> toInclude) { + return new BeanAsArraySerializer(this, toIgnore, toInclude); + } + @Override // @since 2.11.1 protected BeanSerializerBase withProperties(BeanPropertyWriter[] properties, BeanPropertyWriter[] filteredProperties) { diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.java index 32418233f..dd50a6b19 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.java @@ -51,7 +51,11 @@ public class UnwrappingBeanSerializer } protected UnwrappingBeanSerializer(UnwrappingBeanSerializer src, Set<String> toIgnore) { - super(src, toIgnore); + this(src, toIgnore, null); + } + + protected UnwrappingBeanSerializer(UnwrappingBeanSerializer src, Set<String> toIgnore, Set<String> toInclude) { + super(src, toIgnore, toInclude); _nameTransformer = src._nameTransformer; } @@ -94,6 +98,11 @@ public class UnwrappingBeanSerializer return new UnwrappingBeanSerializer(this, toIgnore); } + @Override + protected BeanSerializerBase withIgnorals(Set<String> toIgnore, Set<String> toInclude) { + return new UnwrappingBeanSerializer(this, toIgnore, toInclude); + } + @Override // @since 2.11.1 protected BeanSerializerBase withProperties(BeanPropertyWriter[] properties, BeanPropertyWriter[] filteredProperties) { diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java b/src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java index 95621c9a5..afadc8a22 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.java @@ -26,6 +26,7 @@ import com.fasterxml.jackson.databind.ser.impl.PropertyBasedObjectIdGenerator; import com.fasterxml.jackson.databind.ser.impl.WritableObjectId; import com.fasterxml.jackson.databind.util.ArrayBuilders; import com.fasterxml.jackson.databind.util.Converter; +import com.fasterxml.jackson.databind.util.IgnorePropertiesUtil; import com.fasterxml.jackson.databind.util.NameTransformer; /** @@ -175,10 +176,14 @@ public abstract class BeanSerializerBase @Deprecated // since 2.8, remove soon protected BeanSerializerBase(BeanSerializerBase src, String[] toIgnore) { - this(src, ArrayBuilders.arrayToSet(toIgnore)); + this(src, ArrayBuilders.arrayToSet(toIgnore), null); } - - protected BeanSerializerBase(BeanSerializerBase src, Set<String> toIgnore) + + protected BeanSerializerBase(BeanSerializerBase src, Set<String> toIgnore) { + this(src, toIgnore, null); + } + + protected BeanSerializerBase(BeanSerializerBase src, Set<String> toIgnore, Set<String> toInclude) { super(src._handledType); @@ -193,7 +198,7 @@ public abstract class BeanSerializerBase for (int i = 0; i < len; ++i) { BeanPropertyWriter bpw = propsIn[i]; // should be ignored? - if ((toIgnore != null) && toIgnore.contains(bpw.getName())) { + if (IgnorePropertiesUtil.shouldIgnore(bpw.getName(), toIgnore, toInclude)) { continue; } propsOut.add(bpw); @@ -226,7 +231,25 @@ public abstract class BeanSerializerBase * @since 2.8 */ protected abstract BeanSerializerBase withIgnorals(Set<String> toIgnore); - + + /** + * Mutant factory used for creating a new instance with additional + * set of properties to ignore or include (from properties this instance otherwise has) + * + * @since 2.12 + */ + protected abstract BeanSerializerBase withIgnorals(Set<String> toIgnore, Set<String> toInclude); + + /** + * Mutant factory used for creating a new instance with additional + * set of properties to ignore or include (from properties this instance otherwise has) + * + * @since 2.12 + */ + protected BeanSerializerBase withInclusions(Set<String> toInclude) { + return withIgnorals(Collections.<String>emptySet(), toInclude); + } + /** * Mutant factory used for creating a new instance with additional * set of properties to ignore (from properties this instance otherwise has) @@ -476,6 +499,7 @@ public abstract class BeanSerializerBase // at a later point int idPropOrigIndex = 0; Set<String> ignoredProps = null; + Set<String> includedProps = null; Object newFilterId = null; // Then we may have an override for Object Id @@ -484,6 +508,10 @@ public abstract class BeanSerializerBase if (ignorals != null) { ignoredProps = ignorals.findIgnoredForSerialization(); } + JsonIncludeProperties.Value inclusions = intr.findPropertyInclusions(accessor); + if (inclusions != null) { + includedProps = inclusions.getIncluded(); + } ObjectIdInfo objectIdInfo = intr.findObjectIdInfo(accessor); if (objectIdInfo == null) { // no ObjectId override, but maybe ObjectIdRef? @@ -569,8 +597,9 @@ public abstract class BeanSerializerBase } } // And possibly add more properties to ignore + contextual = contextual.withInclusions(includedProps); if ((ignoredProps != null) && !ignoredProps.isEmpty()) { - contextual = contextual.withIgnorals(ignoredProps); + contextual = contextual.withIgnorals(ignoredProps, includedProps); } if (newFilterId != null) { contextual = contextual.withFilterId(newFilterId); diff --git a/src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java b/src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java index 66056ff7a..34992f4f2 100644 --- a/src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java +++ b/src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java @@ -7,6 +7,7 @@ import java.util.*; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonIncludeProperties; import com.fasterxml.jackson.core.*; import com.fasterxml.jackson.core.type.WritableTypeId; import com.fasterxml.jackson.databind.*; @@ -15,6 +16,7 @@ import com.fasterxml.jackson.databind.introspect.AnnotatedMember; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonFormatVisitorWrapper; import com.fasterxml.jackson.databind.jsonFormatVisitors.JsonMapFormatVisitor; import com.fasterxml.jackson.databind.jsontype.TypeSerializer; +import com.fasterxml.jackson.databind.ser.BeanPropertyWriter; import com.fasterxml.jackson.databind.ser.ContainerSerializer; import com.fasterxml.jackson.databind.ser.ContextualSerializer; import com.fasterxml.jackson.databind.ser.PropertyFilter; @@ -23,6 +25,7 @@ import com.fasterxml.jackson.databind.type.TypeFactory; import com.fasterxml.jackson.databind.util.ArrayBuilders; import com.fasterxml.jackson.databind.util.BeanUtil; import com.fasterxml.jackson.databind.util.ClassUtil; +import com.fasterxml.jackson.databind.util.IgnorePropertiesUtil; /** * Standard serializer implementation for serializing {link java.util.Map} types. @@ -110,6 +113,11 @@ public class MapSerializer protected final Set<String> _ignoredEntries; /** + * Set of entries to include during serialization, if null, it is ignored, empty will include nothing. + */ + protected final Set<String> _includedEntries; + + /** * Id of the property filter to use, if any; null if none. * * @since 2.3 @@ -157,10 +165,10 @@ public class MapSerializer */ /** - * @since 2.5 + * @since 2.12 */ @SuppressWarnings("unchecked") - protected MapSerializer(Set<String> ignoredEntries, + protected MapSerializer(Set<String> ignoredEntries, Set<String> includedEntries, JavaType keyType, JavaType valueType, boolean valueTypeIsStatic, TypeSerializer vts, JsonSerializer<?> keySerializer, JsonSerializer<?> valueSerializer) @@ -168,6 +176,7 @@ public class MapSerializer super(Map.class, false); _ignoredEntries = ((ignoredEntries == null) || ignoredEntries.isEmpty()) ? null : ignoredEntries; + _includedEntries = includedEntries; _keyType = keyType; _valueType = valueType; _valueTypeIsStatic = valueTypeIsStatic; @@ -182,14 +191,34 @@ public class MapSerializer _suppressNulls = false; } + /** + * @since 2.5 + * @deprecated in 2.12, remove from 3.0 + */ + @Deprecated + protected MapSerializer(Set<String> ignoredEntries, + JavaType keyType, JavaType valueType, boolean valueTypeIsStatic, + TypeSerializer vts, + JsonSerializer<?> keySerializer, JsonSerializer<?> valueSerializer) + { + this(ignoredEntries, null, + keyType, valueType, valueTypeIsStatic, + vts, + keySerializer, valueSerializer); + } + + /** + * @since 2.12 + */ @SuppressWarnings("unchecked") protected MapSerializer(MapSerializer src, BeanProperty property, JsonSerializer<?> keySerializer, JsonSerializer<?> valueSerializer, - Set<String> ignoredEntries) + Set<String> ignoredEntries, Set<String> includedEntries) { super(Map.class, false); _ignoredEntries = ((ignoredEntries == null) || ignoredEntries.isEmpty()) ? null : ignoredEntries; + _includedEntries = includedEntries; _keyType = src._keyType; _valueType = src._valueType; _valueTypeIsStatic = src._valueTypeIsStatic; @@ -206,6 +235,18 @@ public class MapSerializer } /** + * @deprecated in 2.12, remove from 3.0 + */ + @SuppressWarnings("unchecked") + @Deprecated + protected MapSerializer(MapSerializer src, BeanProperty property, + JsonSerializer<?> keySerializer, JsonSerializer<?> valueSerializer, + Set<String> ignoredEntries) + { + this(src, property, keySerializer, valueSerializer, ignoredEntries, null); + } + + /** * @since 2.9 */ protected MapSerializer(MapSerializer src, TypeSerializer vts, @@ -213,6 +254,7 @@ public class MapSerializer { super(Map.class, false); _ignoredEntries = src._ignoredEntries; + _includedEntries = src._includedEntries; _keyType = src._keyType; _valueType = src._valueType; _valueTypeIsStatic = src._valueTypeIsStatic; @@ -233,6 +275,7 @@ public class MapSerializer { super(Map.class, false); _ignoredEntries = src._ignoredEntries; + _includedEntries = src._includedEntries; _keyType = src._keyType; _valueType = src._valueType; _valueTypeIsStatic = src._valueTypeIsStatic; @@ -258,20 +301,30 @@ public class MapSerializer } /** - * @since 2.4 + * @since 2.12 */ public MapSerializer withResolved(BeanProperty property, - JsonSerializer<?> keySerializer, JsonSerializer<?> valueSerializer, - Set<String> ignored, boolean sortKeys) + JsonSerializer<?> keySerializer, JsonSerializer<?> valueSerializer, + Set<String> ignored, Set<String> included, boolean sortKeys) { _ensureOverride("withResolved"); - MapSerializer ser = new MapSerializer(this, property, keySerializer, valueSerializer, ignored); + MapSerializer ser = new MapSerializer(this, property, keySerializer, valueSerializer, ignored, included); if (sortKeys != ser._sortKeys) { ser = new MapSerializer(ser, _filterId, sortKeys); } return ser; } + /** + * @since 2.4 + */ + public MapSerializer withResolved(BeanProperty property, + JsonSerializer<?> keySerializer, JsonSerializer<?> valueSerializer, + Set<String> ignored, boolean sortKeys) + { + return withResolved(property, keySerializer, valueSerializer, ignored, null, sortKeys); + } + @Override public MapSerializer withFilterId(Object filterId) { if (_filterId == filterId) { @@ -296,9 +349,9 @@ public class MapSerializer } /** - * @since 2.8 + * @since 2.12 */ - public static MapSerializer construct(Set<String> ignoredEntries, JavaType mapType, + public static MapSerializer construct(Set<String> ignoredEntries, Set<String> includedEntries, JavaType mapType, boolean staticValueType, TypeSerializer vts, JsonSerializer<Object> keySerializer, JsonSerializer<Object> valueSerializer, Object filterId) @@ -326,7 +379,7 @@ public class MapSerializer staticValueType = false; } } - MapSerializer ser = new MapSerializer(ignoredEntries, keyType, valueType, staticValueType, vts, + MapSerializer ser = new MapSerializer(ignoredEntries, includedEntries, keyType, valueType, staticValueType, vts, keySerializer, valueSerializer); if (filterId != null) { ser = ser.withFilterId(filterId); @@ -335,6 +388,17 @@ public class MapSerializer } /** + * @since 2.8 + */ + public static MapSerializer construct(Set<String> ignoredEntries, JavaType mapType, + boolean staticValueType, TypeSerializer vts, + JsonSerializer<Object> keySerializer, JsonSerializer<Object> valueSerializer, + Object filterId) + { + return construct(ignoredEntries, null, mapType, staticValueType, vts, keySerializer, valueSerializer, filterId); + } + + /** * @since 2.9 */ protected void _ensureOverride(String method) { @@ -439,8 +503,10 @@ public class MapSerializer keySer = provider.handleSecondaryContextualization(keySer, property); } Set<String> ignored = _ignoredEntries; + Set<String> included = _includedEntries; boolean sortKeys = false; if (_neitherNull(propertyAcc, intr)) { + // ignorals JsonIgnoreProperties.Value ignorals = intr.findPropertyIgnorals(propertyAcc); if (ignorals != null){ Set<String> newIgnored = ignorals.findIgnoredForSerialization(); @@ -451,6 +517,18 @@ public class MapSerializer } } } + // inclusions + JsonIncludeProperties.Value inclusions = intr.findPropertyInclusions(propertyAcc); + if (inclusions != null) { + Set<String> newIncluded = inclusions.getIncluded(); + if (newIncluded != null) { + included = (included == null) ? new HashSet<String>() : new HashSet<String>(included); + for (String str : newIncluded) { + included.add(str); + } + } + } + // sort key Boolean b = intr.findSerializationSortAlphabetically(propertyAcc); sortKeys = Boolean.TRUE.equals(b); } @@ -461,7 +539,7 @@ public class MapSerializer sortKeys = B.booleanValue(); } } - MapSerializer mser = withResolved(property, keySer, ser, ignored, sortKeys); + MapSerializer mser = withResolved(property, keySer, ser, ignored, included, sortKeys); // [databind#307]: allow filtering if (property != null) { @@ -698,6 +776,7 @@ public class MapSerializer } final JsonSerializer<Object> keySerializer = _keySerializer; final Set<String> ignored = _ignoredEntries; + final Set<String> included = _includedEntries; Object keyElem = null; try { @@ -709,7 +788,7 @@ public class MapSerializer provider.findNullKeySerializer(_keyType, _property).serialize(null, gen, provider); } else { // One twist: is entry ignorable? If so, skip - if ((ignored != null) && ignored.contains(keyElem)) { + if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) { continue; } keySerializer.serialize(keyElem, gen, provider); @@ -743,6 +822,7 @@ public class MapSerializer return; } final Set<String> ignored = _ignoredEntries; + final Set<String> included = _includedEntries; final boolean checkEmpty = (MARKER_FOR_EMPTY == suppressableValue); for (Map.Entry<?,?> entry : value.entrySet()) { @@ -752,7 +832,7 @@ public class MapSerializer if (keyElem == null) { keySerializer = provider.findNullKeySerializer(_keyType, _property); } else { - if (ignored != null && ignored.contains(keyElem)) continue; + if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; keySerializer = _keySerializer; } @@ -801,11 +881,12 @@ public class MapSerializer { final JsonSerializer<Object> keySerializer = _keySerializer; final Set<String> ignored = _ignoredEntries; + final Set<String> included = _includedEntries; final TypeSerializer typeSer = _valueTypeSerializer; for (Map.Entry<?,?> entry : value.entrySet()) { Object keyElem = entry.getKey(); - if (ignored != null && ignored.contains(keyElem)) continue; + if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; if (keyElem == null) { provider.findNullKeySerializer(_keyType, _property).serialize(null, gen, provider); @@ -841,13 +922,14 @@ public class MapSerializer throws IOException { final Set<String> ignored = _ignoredEntries; + final Set<String> included = _includedEntries; final MapProperty prop = new MapProperty(_valueTypeSerializer, _property); final boolean checkEmpty = (MARKER_FOR_EMPTY == suppressableValue); for (Map.Entry<?,?> entry : value.entrySet()) { // First, serialize key; unless ignorable by key final Object keyElem = entry.getKey(); - if (ignored != null && ignored.contains(keyElem)) continue; + if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; JsonSerializer<Object> keySerializer; if (keyElem == null) { @@ -899,6 +981,7 @@ public class MapSerializer throws IOException { final Set<String> ignored = _ignoredEntries; + final Set<String> included = _includedEntries; final boolean checkEmpty = (MARKER_FOR_EMPTY == suppressableValue); for (Map.Entry<?,?> entry : value.entrySet()) { @@ -908,7 +991,7 @@ public class MapSerializer keySerializer = provider.findNullKeySerializer(_keyType, _property); } else { // One twist: is entry ignorable? If so, skip - if (ignored != null && ignored.contains(keyElem)) continue; + if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; keySerializer = _keySerializer; } final Object valueElem = entry.getValue(); @@ -959,13 +1042,14 @@ public class MapSerializer throws IOException { final Set<String> ignored = _ignoredEntries; + final Set<String> included = _includedEntries; final MapProperty prop = new MapProperty(_valueTypeSerializer, _property); final boolean checkEmpty = (MARKER_FOR_EMPTY == suppressableValue); for (Map.Entry<?,?> entry : value.entrySet()) { // First, serialize key; unless ignorable by key final Object keyElem = entry.getKey(); - if (ignored != null && ignored.contains(keyElem)) continue; + if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; JsonSerializer<Object> keySerializer; if (keyElem == null) { |