@@ -23,22 +23,21 @@ public OneBasedMonthDeserializer(JsonDeserializer<?> defaultDeserializer) {
23
23
@ Override
24
24
public Object deserialize (JsonParser parser , DeserializationContext context ) throws IOException {
25
25
JsonToken token = parser .currentToken ();
26
- if (_isPossibleNumericValue (token )) {
27
- String monthSpec = parser .getText ();
28
- int oneBasedMonthNumber = _decodeNumber (monthSpec );
29
- if (1 <= oneBasedMonthNumber && oneBasedMonthNumber <= 12 ) {
30
- return Month .of (oneBasedMonthNumber );
31
- } else if (oneBasedMonthNumber >= 0 ) {
32
- throw new InvalidFormatException (parser , "Month number " + oneBasedMonthNumber + " not allowed for 1-based Month." , oneBasedMonthNumber , Integer .class );
33
- }
26
+ switch (token ) {
27
+ case VALUE_NUMBER_INT :
28
+ return _decodeMonth (parser .getIntValue (), parser );
29
+ case VALUE_STRING :
30
+ String monthSpec = parser .getText ();
31
+ int oneBasedMonthNumber = _decodeNumber (monthSpec );
32
+ if (oneBasedMonthNumber >= 0 ) {
33
+ return _decodeMonth (oneBasedMonthNumber , parser );
34
+ }
35
+ // Otherwise fall through to default handling
36
+ break ;
34
37
}
35
38
return getDelegatee ().deserialize (parser , context );
36
39
}
37
40
38
- private boolean _isPossibleNumericValue (JsonToken token ) {
39
- return token == JsonToken .VALUE_NUMBER_INT || token == JsonToken .VALUE_STRING ;
40
- }
41
-
42
41
/**
43
42
* @return Numeric value of input text that represents a 1-digit or 2-digit number.
44
43
* Negative value in other cases (empty string, not a number, 3 or more digits).
@@ -63,6 +62,13 @@ private int _decodeNumber(String text) {
63
62
return numValue ;
64
63
}
65
64
65
+ private Month _decodeMonth (int oneBasedMonthNumber , JsonParser parser ) throws InvalidFormatException {
66
+ if (Month .JANUARY .getValue () <= oneBasedMonthNumber && oneBasedMonthNumber <= Month .DECEMBER .getValue ()) {
67
+ return Month .of (oneBasedMonthNumber );
68
+ }
69
+ throw new InvalidFormatException (parser , "Month number " + oneBasedMonthNumber + " not allowed for 1-based Month." , oneBasedMonthNumber , Integer .class );
70
+ }
71
+
66
72
@ Override
67
73
protected JsonDeserializer <?> newDelegatingInstance (JsonDeserializer <?> newDelegatee ) {
68
74
return new OneBasedMonthDeserializer (newDelegatee );
0 commit comments