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 № 1Você 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