diff options
Diffstat (limited to 'src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java')
-rw-r--r-- | src/main/java/com/fasterxml/jackson/databind/ser/std/MapSerializer.java | 100 |
1 files changed, 51 insertions, 49 deletions
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 4ebd088d0..5f2ab2169 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 @@ -5,9 +5,7 @@ import java.lang.reflect.Type; 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; @@ -107,7 +105,7 @@ public class MapSerializer /* Config settings, filtering /********************************************************** */ - + /** * Set of entries to omit during serialization, if any */ @@ -115,6 +113,8 @@ public class MapSerializer /** * Set of entries to include during serialization, if null, it is ignored, empty will include nothing. + * + * @since 2.12 */ protected final Set<String> _includedEntries; @@ -145,6 +145,13 @@ public class MapSerializer */ protected final boolean _suppressNulls; + /** + * Helper object used for name-based filtering + * + * @since 2.12 + */ + protected final IgnorePropertiesUtil.Checker _inclusionChecker; + /* /********************************************************** /* Config settings, other @@ -190,6 +197,8 @@ public class MapSerializer _sortKeys = false; _suppressableValue = null; _suppressNulls = false; + + _inclusionChecker = IgnorePropertiesUtil.buildCheckerIfNeeded(_ignoredEntries, _includedEntries); } /** @@ -233,6 +242,8 @@ public class MapSerializer _sortKeys = src._sortKeys; _suppressableValue = src._suppressableValue; _suppressNulls = src._suppressNulls; + + _inclusionChecker = IgnorePropertiesUtil.buildCheckerIfNeeded(_ignoredEntries, _includedEntries); } /** @@ -269,6 +280,8 @@ public class MapSerializer _sortKeys = src._sortKeys; _suppressableValue = suppressableValue; _suppressNulls = suppressNulls; + + _inclusionChecker = src._inclusionChecker; } protected MapSerializer(MapSerializer src, Object filterId, boolean sortKeys) @@ -289,6 +302,8 @@ public class MapSerializer _sortKeys = sortKeys; _suppressableValue = src._suppressableValue; _suppressNulls = src._suppressNulls; + + _inclusionChecker = src._inclusionChecker; } @Override @@ -391,9 +406,9 @@ 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) + boolean staticValueType, TypeSerializer vts, + JsonSerializer<Object> keySerializer, JsonSerializer<Object> valueSerializer, + Object filterId) { return construct(ignoredEntries, null, mapType, staticValueType, vts, keySerializer, valueSerializer, filterId); } @@ -508,25 +523,19 @@ public class MapSerializer if (_neitherNull(propertyAcc, intr)) { final SerializationConfig config = provider.getConfig(); // ignorals - JsonIgnoreProperties.Value ignorals = intr.findPropertyIgnoralByName(config, propertyAcc); - if (ignorals != null){ - Set<String> newIgnored = ignorals.findIgnoredForSerialization(); - if (_nonEmpty(newIgnored)) { - ignored = (ignored == null) ? new HashSet<String>() : new HashSet<String>(ignored); - for (String str : newIgnored) { - ignored.add(str); - } + Set<String> newIgnored = intr.findPropertyIgnoralByName(config, propertyAcc).findIgnoredForSerialization(); + if (_nonEmpty(newIgnored)) { + ignored = (ignored == null) ? new HashSet<String>() : new HashSet<String>(ignored); + for (String str : newIgnored) { + ignored.add(str); } } // inclusions - JsonIncludeProperties.Value inclusions = intr.findPropertyInclusionByName(config, 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); - } + Set<String> newIncluded = intr.findPropertyInclusionByName(config, propertyAcc).getIncluded(); + if (newIncluded != null) { + included = (included == null) ? new HashSet<String>() : new HashSet<String>(included); + for (String str : newIncluded) { + included.add(str); } } // sort key @@ -543,13 +552,10 @@ public class MapSerializer MapSerializer mser = withResolved(property, keySer, ser, ignored, included, sortKeys); // [databind#307]: allow filtering - if (property != null) { - AnnotatedMember m = property.getMember(); - if (m != null) { - Object filterId = intr.findFilterId(m); - if (filterId != null) { - mser = mser.withFilterId(filterId); - } + if (propertyAcc != null) { + Object filterId = intr.findFilterId(propertyAcc); + if (filterId != null) { + mser = mser.withFilterId(filterId); } } JsonInclude.Value inclV = findIncludeOverrides(provider, property, Map.class); @@ -695,8 +701,6 @@ public class MapSerializer * (which can be overridden by custom implementations), but for some * dynamic types, it is possible that serializer is only resolved * during actual serialization. - * - * @since 2.0 */ public JsonSerializer<?> getKeySerializer() { return _keySerializer; @@ -776,8 +780,6 @@ public class MapSerializer return; } final JsonSerializer<Object> keySerializer = _keySerializer; - final Set<String> ignored = _ignoredEntries; - final Set<String> included = _includedEntries; Object keyElem = null; try { @@ -789,7 +791,7 @@ public class MapSerializer provider.findNullKeySerializer(_keyType, _property).serialize(null, gen, provider); } else { // One twist: is entry ignorable? If so, skip - if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) { + if ((_inclusionChecker != null) && _inclusionChecker.shouldIgnore(keyElem)) { continue; } keySerializer.serialize(keyElem, gen, provider); @@ -822,8 +824,6 @@ public class MapSerializer serializeTypedFields(value, gen, provider, suppressableValue); return; } - final Set<String> ignored = _ignoredEntries; - final Set<String> included = _includedEntries; final boolean checkEmpty = (MARKER_FOR_EMPTY == suppressableValue); for (Map.Entry<?,?> entry : value.entrySet()) { @@ -833,7 +833,9 @@ public class MapSerializer if (keyElem == null) { keySerializer = provider.findNullKeySerializer(_keyType, _property); } else { - if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; + if ((_inclusionChecker != null) && _inclusionChecker.shouldIgnore(keyElem)) { + continue; + } keySerializer = _keySerializer; } @@ -881,13 +883,13 @@ public class MapSerializer throws IOException { 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 (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; + if ((_inclusionChecker != null) && _inclusionChecker.shouldIgnore(keyElem)) { + continue; + } if (keyElem == null) { provider.findNullKeySerializer(_keyType, _property).serialize(null, gen, provider); @@ -922,15 +924,15 @@ public class MapSerializer Object suppressableValue) // since 2.5 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 (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; + if ((_inclusionChecker != null) && _inclusionChecker.shouldIgnore(keyElem)) { + continue; + } JsonSerializer<Object> keySerializer; if (keyElem == null) { @@ -981,8 +983,6 @@ public class MapSerializer Object suppressableValue) // since 2.5 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()) { @@ -992,7 +992,9 @@ public class MapSerializer keySerializer = provider.findNullKeySerializer(_keyType, _property); } else { // One twist: is entry ignorable? If so, skip - if (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; + if ((_inclusionChecker != null) && _inclusionChecker.shouldIgnore(keyElem)) { + continue; + } keySerializer = _keySerializer; } final Object valueElem = entry.getValue(); @@ -1042,15 +1044,15 @@ public class MapSerializer Object suppressableValue) 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 (IgnorePropertiesUtil.shouldIgnore(keyElem, ignored, included)) continue; + if ((_inclusionChecker != null) && _inclusionChecker.shouldIgnore(keyElem)) { + continue; + } JsonSerializer<Object> keySerializer; if (keyElem == null) { |