Jackson Json String一代不起作用

时间:2013-08-02 01:21:53

标签: json scala serialization jackson

我正在尝试使用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>

如果我在这里遗漏了一些东西,请告诉我。

1 个答案:

答案 0 :(得分:1)

您可能应该为Result定义通用类型:

case class Result[T <: Base](a: Option[T], b: Option[T])