如何从Play Scala控制器返回json? [英] How to return json from Play Scala controller?
问题描述
我想知道如何从Play(2.2.x)Scala控制器类返回json响应数据以显示在我的视图页面上?我在Postgresql数据库中有json对象(表名称:"test",并且具有:id和名称).请为我提供任何解决方案.
I would like to know that how can I return json response data from Play(2.2.x) Scala controller class to display on my view page ? I have json objects in Postgresql database(table name: "test" and having: id and name). Please provide me any solutions for it.
我已经尝试了以下情况(a和b),但是我不确定为什么我的控制器上没有得到响应(例如:名称),所以我可以在视图页面上显示它们吗?因为我是Play/Scala和Postgresql的新手. 情况如果我给: 型号:
I have tried the following cases(a and b), but I am not sure why I am not getting the response(like: names) on my controller, so I can show them on my view page ? since I am very new to Play/Scala and Postgresql. case a. If I give like: model:
def getTestValuesFromTable() = {
DB.withConnection { implicit connection =>
val selectJson =SQL("select name from test").on().apply().collect {
case Row(id:Long, Some(name:String)) =>
new TestContent(name)
}
//.head
//JsObject(selectJson().map { row => row[Long]("id").toString -> JsString(row[String]("name")) }.toSeq)
}
}
控制器:
def getTest = Action {
val response = TestContent.getTestValuesFromTable()
Ok("Done")
//Ok(response)
}
输出为:完成(应用程序正常执行,没有任何异常,因为我要返回,所以json数据当然不会出现:仅完成,因此获取输出:完成")
Output is: Done(application is executing fine without any exceptions, of course json data is not coming since I am returning: Done only, so getting output: "Done")
情况b.如果我这样做:出现错误:方法使用的参数不足:特征(LinearSeqOptimized)中的(n:Int)models.Testname.未指定的值参数n.我真的不确定如何得到我的回应?
case b. If I do like this: getting error: not enough arguments for method apply: (n: Int)models.Testname in trait LinearSeqOptimized. Unspecified value parameter n. I really not sure how can I get my response for it ?
控制器:
def getTest = Action {
val response = TestContent.getTestValuesFromTable()
// Ok("Done")
Ok(response)
}
型号:
def getTestValuesFromTable(): JsValue = {
DB.withConnection { implicit connection =>
val selectJson = SQL("select * from test")
JsObject(selectJson().map { row => row[Long]("id").toString -> JsString(row[String]("name")) }.toSeq)
// val selectJson =SQL("select name from test").on().apply().collect {
// case Row(id:Long, Some(name:String)) =>
// new TestContent(name)
// }
//.head
JsObject(selectJson().map { row => row[Long]("id").toString -> JsString(row[String]("name")) }.toSeq)//not enough arguments for method apply: (n: Int)models.Testname in trait LinearSeqOptimized. Unspecified value parameter n.
}
}
请让我知道如何获得答复?
Please let me know how to get my response ?
推荐答案
getJsonValuesFromTable
方法不返回任何内容(Unit
).要解决此问题,请将此方法的定义更改为
getJsonValuesFromTable
method return nothing (Unit
). To fix it change definition of this method to
def getJsonValuesFromTable(testContent: TestContent) = {
或显式设置类型:
def getJsonValuesFromTable(testContent: TestContent): Unit = {
接下来,要让客户端知道您正在返回json,还应该设置内容类型:
Also as a next step to let client know that you are returning json, you should set content type:
Ok(Json.obj(response)).as("application/json")
这篇关于如何从Play Scala控制器返回json?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!