/ / Como converter POJO para JSON no Play framework 2.3.x (Scala)? - json, scala, playframework, playframework-2.0

Como converter POJO para JSON no framework Play 2.3.x (Scala)? - json, scala, playframework, playframework-2.0

Qualquer um pode me mostrar como converter POJO ou instância de classe em JSON no framework Play (principalmente o Play v2.3.x) com o Scala?

Por exemplo, eu tenho código como este:

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
}
}

A mensagem de erro:

Não é possível gravar uma instância de com.fasterxml.jackson.data bind.JsonNode para resposta HTTP. Tente definir um Gravável [com.fasterxml.jackson.databind.JsonNode]

ATUALIZAR: Descobri que o erro acima é causado pela importação incorreta do Json classe, deve ser: import play.api.libs.json.Json. No entanto, eu ainda tenho erro no problema implícito abaixo.

eu li este tutorial, mas quando tentei o implícito Writes[Foo] código:

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

Eu tenho Can"t resolve symbol and e Can"t resolve symbol unlift erro no Intellij. Além disso, o código do tutorial parece complexo apenas para a conversão de um objeto em JSON. Gostaria de saber se existe uma maneira mais simples de fazer isso?

Respostas:

7 para resposta № 1

Você pode obter um Writes[Foo] instância usando Json.writes:

implicit val fooWrites = Json.writes[Foo]

Ter esse implícito no escopo é tudo o que você precisa para converter Foo para JSON. Veja a documentação Aqui e Aqui para mais informações sobre JSON lê / escreve.


1 para resposta № 2

O segundo problema - Can"t resolve symbol and - é um Bug do Intellij introduzido na versão 1.3 do plug-in Scala. Na versão 1.3.3 do plug-in Scala, agora existe uma caixa de seleção para definir a solução alternativa:

Idiomas e estruturas> Scala> guia Principal (padrão)> Usar antigo algoritmo de pesquisa implícito