aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorTatu Saloranta <tatu.saloranta@iki.fi>2020-06-30 16:19:19 -0700
committerTatu Saloranta <tatu.saloranta@iki.fi>2020-06-30 16:19:19 -0700
commitd8ca1c2d1c03ff1e3e64d027e84d6130ea9e45c4 (patch)
tree17221822a38dcb9b975455c299e05b449a0bd77f /src/main/java
parent643772b1af7dc5cab15582ae8d2dbc5f9bdf548a (diff)
downloadjackson-databind-d8ca1c2d1c03ff1e3e64d027e84d6130ea9e45c4.tar.gz
Add scalar-extraction support for EnumDeserializer as well
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/deser/std/EnumDeserializer.java31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/EnumDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/EnumDeserializer.java
index c918c0684..ae0957251 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/std/EnumDeserializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/EnumDeserializer.java
@@ -173,21 +173,15 @@ public class EnumDeserializer
@Override
public Object deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
{
+ String text;
JsonToken curr = p.currentToken();
// Usually should just get string value:
if (curr == JsonToken.VALUE_STRING || curr == JsonToken.FIELD_NAME) {
- CompactStringObjectMap lookup = ctxt.isEnabled(DeserializationFeature.READ_ENUMS_USING_TO_STRING)
- ? _getToStringLookup(ctxt) : _lookupByName;
- final String name = p.getText();
- Object result = lookup.find(name);
- if (result == null) {
- return _deserializeAltString(p, ctxt, lookup, name);
- }
- return result;
- }
+ text = p.getText();
+
// But let's consider int acceptable as well (if within ordinal range)
- if (curr == JsonToken.VALUE_NUMBER_INT) {
+ } else if (curr == JsonToken.VALUE_NUMBER_INT) {
// ... unless told not to do that
int index = p.getIntValue();
if (ctxt.isEnabled(DeserializationFeature.FAIL_ON_NUMBERS_FOR_ENUMS)) {
@@ -208,8 +202,23 @@ public class EnumDeserializer
_enumsByIndex.length-1);
}
return null;
+ } else if (curr == JsonToken.START_OBJECT) {
+ // 29-Jun-2020, tatu: New! "Scalar from Object" (mostly for XML)
+ text = ctxt.extractScalarFromObject(p, this, _valueClass);
+ } else {
+ return _deserializeOther(p, ctxt);
+ }
+
+ CompactStringObjectMap lookup = ctxt.isEnabled(DeserializationFeature.READ_ENUMS_USING_TO_STRING)
+ ? _getToStringLookup(ctxt) : _lookupByName;
+ Object result = lookup.find(text);
+ if (result == null) {
+ String trimmed = text.trim();
+ if ((trimmed == text) || (result = lookup.find(trimmed)) == null) {
+ return _deserializeAltString(p, ctxt, lookup, trimmed);
+ }
}
- return _deserializeOther(p, ctxt);
+ return result;
}
/*