Не удается вернуть ответ JSON с помощью Play Framework и Postgresql?
Я пытаюсь вернуть данные ответов JSON из базы данных Postgresql, используя платформу Play (Scala).
Я пробовал следующее, где я не могу вернуть свой ответ JSON.
У меня есть несколько объектов JSON в моей таблице базы данных:jsondata
, который имеетid
а такжеname
, Я написал несколько печатных сообщений, которые приходят как None, не знаете почему?
Ошибка компилятора говорит
Отсутствует параметр [id] или [name]
Я не уверен, что я делаю неправильно в своем коде, чтобы получить выходные данные ответа JSON для моих объектов JSON из базы данных (контроллера и модели).
контроллер:
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
}
}
модель:
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");
}
}
}