diff options
Diffstat (limited to 'src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.java')
-rw-r--r-- | src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.java | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.java b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.java index b43bec3dd..702edd847 100644 --- a/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.java +++ b/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.java @@ -2,6 +2,7 @@ package com.fasterxml.jackson.databind.deser; import java.util.*; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder; import com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap; @@ -10,6 +11,7 @@ import com.fasterxml.jackson.databind.deser.impl.ObjectIdReader; import com.fasterxml.jackson.databind.deser.impl.ValueInjector; import com.fasterxml.jackson.databind.introspect.*; import com.fasterxml.jackson.databind.util.Annotations; +import com.fasterxml.jackson.databind.util.ClassUtil; /** * Builder class used for aggregating deserialization information about @@ -349,7 +351,8 @@ public class BeanDeserializerBuilder Collection<SettableBeanProperty> props = _properties.values(); _fixAccess(props); BeanPropertyMap propertyMap = BeanPropertyMap.construct(_config, props, - _collectAliases(props)); + _collectAliases(props), + _findCaseInsensitivity()); propertyMap.assignIndexes(); // view processing must be enabled if: @@ -404,7 +407,7 @@ public class BeanDeserializerBuilder if (!expBuildMethodName.isEmpty()) { _context.reportBadDefinition(_beanDesc.getType(), String.format("Builder class %s does not have build method (name: '%s')", - _beanDesc.getBeanClass().getName(), + ClassUtil.getTypeDescription(_beanDesc.getType()), expBuildMethodName)); } } else { @@ -415,17 +418,18 @@ public class BeanDeserializerBuilder && !rawBuildType.isAssignableFrom(rawValueType) && !rawValueType.isAssignableFrom(rawBuildType)) { _context.reportBadDefinition(_beanDesc.getType(), - String.format("Build method '%s' has wrong return type (%s), not compatible with POJO type (%s)", + String.format("Build method `%s` has wrong return type (%s), not compatible with POJO type (%s)", _buildMethod.getFullName(), - rawBuildType.getName(), - valueType.getRawClass().getName())); + ClassUtil.getClassDescription(rawBuildType), + ClassUtil.getTypeDescription(valueType))); } } // And if so, we can try building the deserializer Collection<SettableBeanProperty> props = _properties.values(); _fixAccess(props); BeanPropertyMap propertyMap = BeanPropertyMap.construct(_config, props, - _collectAliases(props)); + _collectAliases(props), + _findCaseInsensitivity()); propertyMap.assignIndexes(); boolean anyViews = !_config.isEnabled(MapperFeature.DEFAULT_VIEW_INCLUSION); @@ -541,4 +545,15 @@ public class BeanDeserializerBuilder } return mapping; } + + // @since 2.12 + protected boolean _findCaseInsensitivity() { + // 07-May-2020, tatu: First find combination of per-type config overrides (higher + // precedence) and per-type annotations (lower): + JsonFormat.Value format = _beanDesc.findExpectedFormat(null); + // and see if any of those has explicit definition; if not, use global baseline default + Boolean B = format.getFeature(JsonFormat.Feature.ACCEPT_CASE_INSENSITIVE_PROPERTIES); + return (B == null) ? _config.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES) + : B.booleanValue(); + } } |