¿No puede devolver la respuesta JSON usando Play Framework y Postgresql?
Estoy tratando de devolver datos de respuesta JSON de la base de datos Postgresql usando Play Framework (Scala).
He intentado lo siguiente donde no puedo devolver mi salida de respuesta json.
Tengo un par de objetos JSON en mi tabla de base de datos:jsondata
, que es tenerid
yname
. He escrito algunos mensajes impresos, esos vienen como Ninguno, no sé por qué.
El error del compilador dice
Falta el parámetro [id] o [nombre]
No estoy seguro de lo que estoy haciendo mal en mi código para obtener la salida de respuesta JSON para mis objetos JSON de la base de datos (controlador y modelo).
controlador:
import play.api.Play.current
import play.mvc.Controller;
import play.libs.Json;
import play.libs.Json.*;
import com.fasterxml.jackson.databind.JsonNode;
import org.codehaus.jackson.JsonNode;
import models.Getjsondata
import com.google.gson.Gson
import scala.util.{Try, Success, Failure}
Getjsondata.getJsonValues(Getjsondata(Json.parse(id)), Json.parse(name));
class MyController extends Controller {
def getJson = Action { request =>
println("calling getJson ... !!")//getting this message on play console
val body: Anyname = request.body
val textBody: Option[String] = body.asText
println("body: "+body);//AnyContentAsEmpty
println("textBody: "+textBody);//None
val optionJson = textBody.flatMap(json => Try(Json.parse(json)).toOption)
val bodyId = optionJson.map(_ \ "id")
val bodyname = optionJson.map(_ \ "name")
println("bodyId: "+bodyId);//None
println("bodyName: "+bodyName);//None
println("optionJson: "+optionJson);//None
{
for {
id <- bodyId
name <- bodyname
json <- optionJson
} yield {
println("calling getJson else ... !!")
val response = Getjsondata.getJsonValues(Getjsondata(id.as[Long],name.as[String]));
Ok("Json data retrieved successfully: "+response)
}
} getOrElse BadRequest("Missing parameter either [id] or [name]")//giving error, not executing the above for loop
}
}
modelo:
import anorm._
import anorm.SqlParser._
import play.api.db._
import play.api.Play.current
import play.api.libs.json.{Json,JsValue}
import play.api.db.DB
import play.api.libs.json._
import anorm.~
import play.api.libs.functional.syntax._
case class Getjsondata (
id: Pk[Long], name: String
)
object Getjsondata {
val extractor = {
get[Pk[Long]]("jsondata.id") ~
get[String]("jsondata.name") map {
case id~name => Getjsondata(id, name)
}
}
def getJsonValues(jsondata: Getjsondata): List[Getjsondata]= {
println("addJson getJsonValues page... !")
DB.withConnection { implicit connection =>
// SQL("select row_to_json(jsondata) from jsondata");
SQL("select * from jsondata");
}
}
}