jackson-module-scala icon indicating copy to clipboard operation
jackson-module-scala copied to clipboard

FIELD property accessor is overridden by GETTER property accessor

Open ncanning opened this issue 9 years ago • 0 comments

Not sure exactly what's going on here. A public field gets serialized fine, until I set the visibility using PropertyAccessor.GETTER.

~/test ❯❯❯ cat src/main/scala/Test.scala
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.annotation.PropertyAccessor
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility

import java.io.StringWriter

object Test extends App {
  val serializer = new ObjectMapper
  serializer.registerModule(DefaultScalaModule)
  //serializer.setVisibility(PropertyAccessor.GETTER, Visibility.NONE)
  serializer.setVisibility(PropertyAccessor.FIELD, Visibility.PROTECTED_AND_PUBLIC)

  val test = new Test
  test.addString("a")
  println(test.toJson)
}

class Test {

  var entries = Seq[String]()

  def addString(str: String) = {
    entries = entries :+ str
  }

  def toJson(): String = {
    val writer = new StringWriter
    Test.serializer.writeValue(writer, this)
    return writer.toString
  }
}

produces {"entries":["a"]}, but uncommenting the GETTER line produces {}. Not sure if I'm missing something about the way PropretyAccessor.GETTER works, but this seems like a bug.

Here's my build.sbt as well, in case it's a version-specific problem:

~/test ❯❯❯ cat build.sbt
name := "Test"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.7.5"
)

ncanning avatar Sep 02 '16 17:09 ncanning