File tree 2 files changed +21
-2
lines changed
main/scala/com/fasterxml/jackson/module/scala/deser
test/scala/com/fasterxml/jackson/module/scala/deser
2 files changed +21
-2
lines changed Original file line number Diff line number Diff line change 1
1
package com .fasterxml .jackson .module .scala .deser
2
2
3
- import com .fasterxml .jackson .core .JsonParser
3
+ import com .fasterxml .jackson .core .{ JsonParser , JsonToken }
4
4
import com .fasterxml .jackson .databind .deser .Deserializers
5
5
import com .fasterxml .jackson .databind .deser .std .StdDeserializer
6
6
import com .fasterxml .jackson .databind ._
@@ -11,7 +11,14 @@ import scala.languageFeature.postfixOps
11
11
import scala .util .control .NonFatal
12
12
13
13
private class ScalaObjectDeserializer (value : Any ) extends StdDeserializer [Any ](classOf [Any ]) {
14
- override def deserialize (p : JsonParser , ctxt : DeserializationContext ): Any = value
14
+ override def deserialize (p : JsonParser , ctxt : DeserializationContext ): Any = {
15
+ if (p.currentToken() != JsonToken .END_OBJECT ) {
16
+ while (p.nextToken() != JsonToken .END_OBJECT ) {
17
+ // consume the object
18
+ }
19
+ }
20
+ value
21
+ }
15
22
}
16
23
17
24
private object ScalaObjectDeserializerResolver extends Deserializers .Base {
Original file line number Diff line number Diff line change 1
1
package com .fasterxml .jackson .module .scala .deser
2
2
3
3
import com .fasterxml .jackson .annotation .{JsonAutoDetect , PropertyAccessor }
4
+ import com .fasterxml .jackson .databind .DeserializationFeature
4
5
import com .fasterxml .jackson .databind .json .JsonMapper
5
6
import com .fasterxml .jackson .module .scala .{ClassTagExtensions , DefaultScalaModule }
6
7
import com .fasterxml .jackson .module .scala .deser .CaseObjectDeserializerTest .{Foo , TestObject }
@@ -25,6 +26,17 @@ class CaseObjectDeserializerTest extends DeserializerTest {
25
26
assert(deserialized === original)
26
27
}
27
28
29
+ it should " deserialize a case object and not create a new instance (FAIL_ON_TRAILING_TOKENS enabled)" in {
30
+ val mapper = newBuilder
31
+ .enable(DeserializationFeature .FAIL_ON_TRAILING_TOKENS )
32
+ .build()
33
+ val original = TestObject
34
+ val json = mapper.writeValueAsString(original)
35
+ json shouldEqual " {}"
36
+ val deserialized = mapper.readValue(json, TestObject .getClass)
37
+ assert(deserialized === original)
38
+ }
39
+
28
40
it should " deserialize Foo and not create a new instance" in {
29
41
val mapper = JsonMapper .builder().addModule(DefaultScalaModule ).addModule(ScalaObjectDeserializerModule ).build()
30
42
val original = Foo
You can’t perform that action at this time.
0 commit comments