【发布时间】:2016-02-18 10:22:48
【问题描述】:
我正在尝试使用 Play 框架(Scala)从 Postgresql 数据库返回 json 响应数据。我尝试了以下方法:但我无法返回我的 json 响应输出。(因为我的数据库表中有几个 json 对象:jsondata,它有 id 和 name)。我得到:“type mismatch; found : anorm.SqlQuery required: String”。我不确定我在代码中哪里做错了从数据库(控制器和模型)获取我的 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
val optionJson = textBody.flatMap(json => Try(Json.parse(json)).toOption)
val bodyId = optionJson.map(_ \ "id")
val bodyname = optionJson.map(_ \ "name")
{
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]")
}
}
型号:
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): String = {
println("addJson getJsonValues page... !")
DB.withConnection { implicit connection =>
// SQL("select row_to_json(jsondata) from jsondata");
SQL("select * from jsondata");//type mismatch; found : anorm.SqlQuery required: String
}
println("Test String... !")
}
}
【问题讨论】:
-
您正在混合使用 Scala 和 Java 代码。也许尝试使用所有 Scala。
-
@Reactormonk,感谢您的回复,我可以知道如何在 Scala 中使用/编写我的控制器类吗?
-
也许你可以看看文档并尝试一下?
-
@cchantep,我修改了问题描述,得到错误:类型不匹配;发现: anorm.SqlQuery required: String,请告诉我如何获取我的 json 响应。
-
@Reactormonk,我已经修改了问题描述,请告诉我我的代码哪里做错了。
标签: json postgresql scala playframework