Home

Awesome

Build Status Maven Central

jackson-scala-reflect-extensions

Jackson Scala 2 support that uses scala-reflect to get type info. The problem that this lib solves in described in this FAQ entry.

The lib can also auto-discover subtypes if you are using Jackson's polymorphism support (@JsonTypeInfo annotation). You can omit the @JsonSubTypes if you dealing with sealed traits.

This lib is designed to be used with jackson-module-scala. By default, jackson-module-scala uses Java reflection to work out the class structure.

The Scala3 equivalent is jackson-scala3-reflection-extensions.

ScalaReflectExtensions can be mixed into your ObjectMapper in as a similar way to jackson-module-scala's ClassTagExtensions and ScalaObjectMapper.

libraryDependencies += "com.github.pjfanning" %% "jackson-scala-reflect-extensions" % "2.16.0"
import com.fasterxml.jackson.databind.json.JsonMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.github.pjfanning.jackson.reflect.ScalaReflectExtensions

val mapperBuilder = JsonMapper.builder()
  .addModule(DefaultScalaModule)

val mapper = mapperBuilder.build() :: ScalaReflectExtensions

// this should also work but Jackson is moving to supporting only creating mapper instances from a builder
val mapper2 = new ObjectMapper with ScalaReflectExtensions
mapper2.registerModule(DefaultScalaModule)

val instance = mapper.readValue[MyClass](jsonText)