aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorTatu Saloranta <tatu.saloranta@iki.fi>2020-06-29 15:09:21 -0700
committerTatu Saloranta <tatu.saloranta@iki.fi>2020-06-29 15:09:21 -0700
commit3d256f1630913919033fa22ce84fb9fa42bc719f (patch)
treecaabbb05427c4e3102bfe129a4577d2a6a37fb0a /src/main/java
parent00c5a0426c41ee0c95d5bf0d7d94150c483511c8 (diff)
downloadjackson-databind-3d256f1630913919033fa22ce84fb9fa42bc719f.tar.gz
...
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java135
1 files changed, 70 insertions, 65 deletions
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
index 4848e22b0..7b02c6986 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
@@ -370,42 +370,11 @@ public abstract class StdDeserializer<T>
protected final boolean _parseBooleanPrimitive(JsonParser p, DeserializationContext ctxt)
throws IOException
{
+ String text;
switch (p.currentTokenId()) {
case JsonTokenId.ID_STRING:
- // And finally, let's allow Strings to be converted too
- String text = p.getText();
- CoercionAction act = _checkFromStringCoercion(ctxt, text,
- LogicalType.Boolean, Boolean.TYPE);
- if (act == CoercionAction.AsNull) {
- _verifyNullForPrimitive(ctxt);
- return false;
- }
- if (act == CoercionAction.AsEmpty) {
- return false;
- }
- text = text.trim();
- final int len = text.length();
-
- // For [databind#1852] allow some case-insensitive matches (namely,
- // true/True/TRUE, false/False/FALSE
- if (len == 4) {
- if (_isTrue(text)) {
- return true;
- }
- } else if (len == 5) {
- if (_isFalse(text)) {
- return false;
- }
- }
- if (_hasTextualNull(text)) {
- _verifyNullForPrimitiveCoercion(ctxt, text);
- return false;
- }
- {
- Boolean b = (Boolean) ctxt.handleWeirdStringValue(Boolean.TYPE, text,
- "only \"true\"/\"True\"/\"TRUE\" or \"false\"/\"False\"/\"FALSE\" recognized");
- return Boolean.TRUE.equals(b);
- }
+ text = p.getText();
+ break;
case JsonTokenId.ID_NUMBER_INT:
// may accept ints too, (0 == false, otherwise true)
@@ -426,8 +395,41 @@ public abstract class StdDeserializer<T>
_verifyEndArrayForSingle(p, ctxt);
return parsed;
}
+ // fall through
+ default:
+ return ((Boolean) ctxt.handleUnexpectedToken(Boolean.TYPE, p)).booleanValue();
+ }
+
+ final CoercionAction act = _checkFromStringCoercion(ctxt, text,
+ LogicalType.Boolean, Boolean.TYPE);
+ if (act == CoercionAction.AsNull) {
+ _verifyNullForPrimitive(ctxt);
+ return false;
+ }
+ if (act == CoercionAction.AsEmpty) {
+ return false;
+ }
+ text = text.trim();
+ final int len = text.length();
+
+ // For [databind#1852] allow some case-insensitive matches (namely,
+ // true/True/TRUE, false/False/FALSE
+ if (len == 4) {
+ if (_isTrue(text)) {
+ return true;
+ }
+ } else if (len == 5) {
+ if (_isFalse(text)) {
+ return false;
+ }
+ }
+ if (_hasTextualNull(text)) {
+ _verifyNullForPrimitiveCoercion(ctxt, text);
+ return false;
}
- return ((Boolean) ctxt.handleUnexpectedToken(Boolean.TYPE, p)).booleanValue();
+ Boolean b = (Boolean) ctxt.handleWeirdStringValue(Boolean.TYPE, text,
+ "only \"true\"/\"True\"/\"TRUE\" or \"false\"/\"False\"/\"FALSE\" recognized");
+ return Boolean.TRUE.equals(b);
}
// [databind#1852]
@@ -475,36 +477,11 @@ public abstract class StdDeserializer<T>
Class<?> targetType)
throws IOException
{
+ String text;
switch (p.currentTokenId()) {
case JsonTokenId.ID_STRING:
- String text = p.getText();
- CoercionAction act = _checkFromStringCoercion(ctxt, text,
- LogicalType.Boolean, targetType);
- if (act == CoercionAction.AsNull) {
- return null;
- }
- if (act == CoercionAction.AsEmpty) {
- return false;
- }
- text = text.trim();
- final int len = text.length();
-
- // For [databind#1852] allow some case-insensitive matches (namely,
- // true/True/TRUE, false/False/FALSE
- if (len == 4) {
- if (_isTrue(text)) {
- return true;
- }
- } else if (len == 5) {
- if (_isFalse(text)) {
- return false;
- }
- }
- if (_checkTextualNull(ctxt, text)) {
- return null;
- }
- return (Boolean) ctxt.handleWeirdStringValue(targetType, text,
- "only \"true\" or \"false\" recognized");
+ text = p.getText();
+ break;
case JsonTokenId.ID_NUMBER_INT:
// may accept ints too, (0 == false, otherwise true)
return _coerceBooleanFromInt(p, ctxt, targetType);
@@ -516,9 +493,37 @@ public abstract class StdDeserializer<T>
return null;
case JsonTokenId.ID_START_ARRAY: // unwrapping / from-empty-array coercion?
return (Boolean) _deserializeFromArray(p, ctxt);
+ default:
+ return (Boolean) ctxt.handleUnexpectedToken(targetType, p);
+ }
+
+ final CoercionAction act = _checkFromStringCoercion(ctxt, text,
+ LogicalType.Boolean, targetType);
+ if (act == CoercionAction.AsNull) {
+ return null;
+ }
+ if (act == CoercionAction.AsEmpty) {
+ return false;
+ }
+ text = text.trim();
+ final int len = text.length();
+
+ // For [databind#1852] allow some case-insensitive matches (namely,
+ // true/True/TRUE, false/False/FALSE
+ if (len == 4) {
+ if (_isTrue(text)) {
+ return true;
+ }
+ } else if (len == 5) {
+ if (_isFalse(text)) {
+ return false;
+ }
+ }
+ if (_checkTextualNull(ctxt, text)) {
+ return null;
}
- // Otherwise, no can do:
- return (Boolean) ctxt.handleUnexpectedToken(targetType, p);
+ return (Boolean) ctxt.handleWeirdStringValue(targetType, text,
+ "only \"true\" or \"false\" recognized");
}
protected final byte _parseBytePrimitive(JsonParser p, DeserializationContext ctxt)