@@ -2,83 +2,38 @@ package com.fasterxml.jackson
2
2
package module .scala
3
3
package deser
4
4
5
- import com .fasterxml .jackson .core .JsonToken .{START_ARRAY , VALUE_NUMBER_FLOAT , VALUE_NUMBER_INT , VALUE_STRING }
6
- import com .fasterxml .jackson .core .io .BigDecimalParser
7
- import com .fasterxml .jackson .core .{JsonParser , JsonToken }
8
- import com .fasterxml .jackson .databind .DeserializationFeature .UNWRAP_SINGLE_VALUE_ARRAYS
9
- import com .fasterxml .jackson .databind .JacksonModule .SetupContext
10
- import com .fasterxml .jackson .databind ._
5
+ import com .fasterxml .jackson .core .JsonParser
11
6
import com .fasterxml .jackson .databind .deser .Deserializers
12
7
import com .fasterxml .jackson .databind .deser .std .StdScalarDeserializer
13
- import com .fasterxml .jackson .module . scala . JacksonModule . InitializerBuilder
14
- import com .fasterxml .jackson .module . scala .{ JacksonModule => JacksonScalaModule }
15
-
16
- import scala . reflect .{ ClassTag , classTag }
8
+ import com .fasterxml .jackson .databind . _
9
+ import com .fasterxml .jackson .databind . deser . std . NumberDeserializers .{
10
+ BigDecimalDeserializer => JavaBigDecimalDeserializer , BigIntegerDeserializer
11
+ }
17
12
18
- private abstract class BigNumberDeserializer [T >: Null : ClassTag ](creator : (String ) => T )
19
- extends StdScalarDeserializer [T ](classTag[T ].runtimeClass)
20
- {
21
- override def deserialize (jp : JsonParser , ctxt : DeserializationContext ): T = {
22
- val t = jp.currentToken()
23
- t match {
24
- case VALUE_NUMBER_INT | VALUE_NUMBER_FLOAT => creator(jp.getText.trim)
25
- case VALUE_STRING =>
26
- val text = jp.getText.trim
27
- if (text.isEmpty) None .orNull else try {
28
- creator(text)
29
- }
30
- catch {
31
- case _ : IllegalArgumentException => throw ctxt.weirdStringException(text, _valueClass, " not a valid representation" )
32
- }
33
- case START_ARRAY if ctxt.isEnabled(UNWRAP_SINGLE_VALUE_ARRAYS ) =>
34
- jp.nextToken()
35
- val value = deserialize(jp, ctxt)
36
- if (jp.nextToken() != JsonToken .END_ARRAY ) {
37
- throw ctxt.wrongTokenException(jp, ctxt.getContextualType,
38
- JsonToken .END_ARRAY , " Attempted to unwrap array for single value but there was more than a single value in the array" )
39
- }
40
- value
41
- case _ =>
42
- ctxt.handleUnexpectedToken(_valueType, jp).asInstanceOf [T ]
43
- }
13
+ private object BigDecimalDeserializer extends StdScalarDeserializer [BigDecimal ](classOf [BigDecimal ]) {
14
+ override def deserialize (p : JsonParser , ctxt : DeserializationContext ): BigDecimal = {
15
+ JavaBigDecimalDeserializer .instance.deserialize(p, ctxt)
44
16
}
45
17
}
46
18
47
- private object ScalaBigDecimalParser {
48
- def fromString (str : String ): BigDecimal = BigDecimalParser .parse(str)
19
+ private object BigIntDeserializer extends StdScalarDeserializer [BigInt ](classOf [BigInt ]) {
20
+ override def deserialize (p : JsonParser , ctxt : DeserializationContext ): BigInt = {
21
+ BigIntegerDeserializer .instance.deserialize(p, ctxt)
22
+ }
49
23
}
50
24
51
- private object BigDecimalDeserializer extends BigNumberDeserializer ( ScalaBigDecimalParser .fromString)
52
-
53
- private object BigIntDeserializer extends BigNumberDeserializer ( BigInt .apply)
25
+ private object NumberDeserializers extends Deserializers . Base {
26
+ private val BigDecimalClass = classOf [ BigDecimal ]
27
+ private val BigIntClass = classOf [ BigInt ]
54
28
55
- private class NumberDeserializers (config : ScalaModule .Config ) extends Deserializers .Base
56
- {
57
- private val BigDecimalClass = BigDecimalDeserializer .handledType()
58
- private val BigIntClass = BigIntDeserializer .handledType()
59
-
60
- override def findBeanDeserializer (tpe : JavaType , deserializationConfig : DeserializationConfig , beanDesc : BeanDescription ): ValueDeserializer [_] =
29
+ override def findBeanDeserializer (tpe : JavaType , config : DeserializationConfig , beanDesc : BeanDescription ): JsonDeserializer [_] =
61
30
tpe.getRawClass match {
62
31
case BigDecimalClass => BigDecimalDeserializer
63
32
case BigIntClass => BigIntDeserializer
64
33
case _ => None .orNull
65
34
}
66
-
67
- override def hasDeserializerFor (deserializationConfig : DeserializationConfig , valueType : Class [_]): Boolean = {
68
- valueType match {
69
- case BigDecimalClass => true
70
- case BigIntClass => true
71
- case _ => false
72
- }
73
- }
74
35
}
75
36
76
- trait ScalaNumberDeserializersModule extends JacksonScalaModule {
77
- override def getInitializers (config : ScalaModule .Config ): Seq [SetupContext => Unit ] = {
78
- val builder = new InitializerBuilder ()
79
- builder += new NumberDeserializers (config)
80
- builder.build()
81
- }
37
+ trait ScalaNumberDeserializersModule extends JacksonModule {
38
+ this += NumberDeserializers
82
39
}
83
-
84
- object ScalaNumberDeserializersModule extends ScalaNumberDeserializersModule
0 commit comments