任何人都可以告诉我如何使用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 and
和 Can't resolve symbol unlift
错误 . 此外,教程的代码看起来很复杂,只是为了将对象转换为JSON . 我想知道是否有更简单的方法来做到这一点?
2 回答
您可以使用
Json.writes
获取Writes[Foo]
实例:将此隐含在范围内是将
Foo
转换为JSON所需的全部内容 . 有关JSON读/写的详细信息,请参阅文档here和here .第二个问题 -
Can't resolve symbol and
- 是Scala插件1.3版中引入的Intellij bug . 在Scala插件的1.3.3版本中,现在有一个解决方法 - 设置首选项复选框: