首页 文章

如何在Play framework 2.3.x(Scala)中将POJO转换为JSON?

提问于
浏览
6

任何人都可以告诉我如何使用Scala将POJO或类实例转换为Play框架中的JSON(特别是Play v2.3.x)?

例如,我有这样的代码:

case class Foo(name: String, address: String)

def index = Action {
      request => {
        val foo = Foo("John Derp", "Jem Street 21")  // I want to convert this object to JSON
        Ok(Json.toJson(foo))    // I got error at here
      }
}

错误消息:

无法将com.fasterxml.jackson.data bind.JsonNode的实例写入HTTP响应 . 尝试定义一个可写的[com.fasterxml.jackson.databind.JsonNode]

UPDATE: 我发现上面的错误是由错误导入 Json 类引起的,应该是: import play.api.libs.json.Json . 但是我仍然在下面的隐含问题上有错误 .

我已阅读this tutorial,但当我尝试隐式 Writes[Foo] 代码时:

implicit val fooWrites: Writes[Foo] = (
        (JsPath \ "name").write[String] and
            (JsPath \ "address").write[String]
        )(unlift(Foo.unapply))

我在Intellij中得到 Can't resolve symbol andCan't resolve symbol unlift 错误 . 此外,教程的代码看起来很复杂,只是为了将对象转换为JSON . 我想知道是否有更简单的方法来做到这一点?

2 回答

  • 7

    您可以使用 Json.writes 获取 Writes[Foo] 实例:

    implicit val fooWrites = Json.writes[Foo]
    

    将此隐含在范围内是将 Foo 转换为JSON所需的全部内容 . 有关JSON读/写的详细信息,请参阅文档herehere .

  • 1

    第二个问题 - Can't resolve symbol and - 是Scala插件1.3版中引入的Intellij bug . 在Scala插件的1.3.3版本中,现在有一个解决方法 - 设置首选项复选框:

    语言和框架> Scala> Core(默认)选项卡>使用旧的隐式搜索算法

相关问题