如何从Play Scala控制器返回json? [英] How to return json from Play Scala controller?

查看:188
本文介绍了如何从Play Scala控制器返回json?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何从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),但是我不确定为什么我的控制器上没有得到响应(例如:名称),所以我可以在视图页面上显示它们吗?因为我是Pl​​ay/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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆