我正在尝试使用Jackson从scala对象生成json字符串。
import com.fasterxml.jackson.annotation.JsonInclude.Include
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
trait Base
case class A(s: String) extends Base
case class B(s: String) extends Base
case class Result(a: Option[Base], b: Option[Base])
object App {
val jsonMapper =
new ObjectMapper()
.registerModule(DefaultScalaModule)
def main(args : Array[String]) {
val x = Result(Some(A("a")), Some(B("b")))
println(jsonMapper.writeValueAsString(x))
}
}
我期待像这样的输出
{"a":{"s": "a"},"b":{"s": "b"}}
但我得到的是这个,
{"a":{},"b":{}}
我正在使用的Maven依赖,
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-scala_2.9.2</artifactId>
<version>2.2.2</version>
</dependency>
如果我在这里遗漏了一些东西,请告诉我。
答案 0 :(得分:1)
您可能应该为Result
定义通用类型:
case class Result[T <: Base](a: Option[T], b: Option[T])