-
-
Notifications
You must be signed in to change notification settings - Fork 143
Closed
Labels
Description
Configuring jackson to treat null collections as empty appears to work for java.util collections, but fails for scala collections like Seq
package com.centricient.service.bot
import java.util
import com.centricient.service.bot.JacksonTest.{D, E}
import com.fasterxml.jackson.annotation.{JsonSetter, Nulls}
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import org.junit.runner.RunWith
import org.scalatest.{BeforeAndAfter, FlatSpec, Matchers}
import org.scalatest.junit.JUnitRunner
import scala.collection.mutable
object JacksonTest {
case class D(s: util.ArrayList[String])
case class E(s: Seq[String])
}
@RunWith(classOf[JUnitRunner])
class JacksonTest extends FlatSpec with BeforeAndAfter with Matchers {
val mapper = new ObjectMapper()
mapper.registerModule(new DefaultScalaModule());
mapper.setDefaultSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
it should "do stuff" in {
val result1 = mapper.readValue("{\"s\": null}", classOf[D]) // Yields => D([])
// Fails
// com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot create empty instance of [collection-like type; class scala.collection.Seq, contains [simple type, class java.lang.String]], no default Creator
// at [Source: (String)"{"s": null}"; line: 1, column: 7] (through reference chain: com.centricient.service.bot.JacksonTest$E["s"])
val result2 = mapper.readValue("{\"s\": null}", classOf[E])
}
}