-
-
Notifications
You must be signed in to change notification settings - Fork 143
Closed
Labels
Description
Using classes annotated with JsonIdentityInfo
inside of tuples has a weir behaviour
@JsonIdentityInfo(generator = classOf[ObjectIdGenerators.IntSequenceGenerator])
case class Foo(x: Int)
case class ManyFooPairs(foos: Seq[(Foo, Foo)])
object Main extends App {
val mapper = new ObjectMapper().registerModule(DefaultScalaModule)
val f1 = Foo(1)
val f2 = Foo(2)
println(mapper.writeValueAsString(
ManyFooPairs(Seq((f1, f1), (f1, f2)))
))
}
prints
{"foos":[[{"@id":1,"x":1},{"@id":1,"x":1}],[{"@id":1,"x":1},{"@id":1,"x":2}]]}
Introducing a specific pair class solves the issue:
@JsonIdentityInfo(generator = classOf[ObjectIdGenerators.IntSequenceGenerator])
case class Foo(x: Int)
case class FooPair(l: Foo, r: Foo)
case class ManyFooPairs(foos: Seq[FooPair])
object Main extends App {
val mapper = new ObjectMapper().registerModule(DefaultScalaModule)
val f1 = Foo(1)
val f2 = Foo(2)
println(mapper.writeValueAsString(
ManyFooPairs(Seq(FooPair(f1, f1), FooPair(f1, f2)))
))
}
prints
{"foos":[{"l":{"@id":1,"x":1},"r":1},{"l":1,"r":{"@id":2,"x":2}}]}