Skip to content

Commit 4c811cf

Browse files
authored
handle token reading issue in ScalaObjectDeserializer (#702)
1 parent 9c1fa54 commit 4c811cf

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

src/main/scala/com/fasterxml/jackson/module/scala/deser/ScalaObjectDeserializerModule.scala

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.fasterxml.jackson.module.scala.deser
22

3-
import com.fasterxml.jackson.core.JsonParser
3+
import com.fasterxml.jackson.core.{JsonParser, JsonToken}
44
import com.fasterxml.jackson.databind.deser.Deserializers
55
import com.fasterxml.jackson.databind.deser.std.StdDeserializer
66
import com.fasterxml.jackson.databind._
@@ -11,7 +11,14 @@ import scala.languageFeature.postfixOps
1111
import scala.util.control.NonFatal
1212

1313
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+
}
1522
}
1623

1724
private object ScalaObjectDeserializerResolver extends Deserializers.Base {

src/test/scala/com/fasterxml/jackson/module/scala/deser/CaseObjectDeserializerTest.scala

+12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.fasterxml.jackson.module.scala.deser
22

33
import com.fasterxml.jackson.annotation.{JsonAutoDetect, PropertyAccessor}
4+
import com.fasterxml.jackson.databind.DeserializationFeature
45
import com.fasterxml.jackson.databind.json.JsonMapper
56
import com.fasterxml.jackson.module.scala.{ClassTagExtensions, DefaultScalaModule}
67
import com.fasterxml.jackson.module.scala.deser.CaseObjectDeserializerTest.{Foo, TestObject}
@@ -25,6 +26,17 @@ class CaseObjectDeserializerTest extends DeserializerTest {
2526
assert(deserialized === original)
2627
}
2728

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+
2840
it should "deserialize Foo and not create a new instance" in {
2941
val mapper = JsonMapper.builder().addModule(DefaultScalaModule).addModule(ScalaObjectDeserializerModule).build()
3042
val original = Foo

0 commit comments

Comments
 (0)