aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.java
diff options
context:
space:
mode:
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.java27
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();
+ }
}