如何从Play Scala控制器返回json?

时间:2016-02-23 09:30:23

标签: json postgresql scala playframework anorm

我想知道如何从Play(2.2.x)Scala控制器类返回json响应数据以显示在我的视图页面上?我在Postgresql数据库中有json对象(表名:" test"并且有:id和name)。请为我提供任何解决方案。

我尝试了以下情况(a和b),但我不确定为什么我没有在控制器上得到响应(如:姓名),所以我可以在我的视图页面上显示它们?因为我是Pl​​ay / Scala和Postgresql的新手。 案例a。如果我愿意: 模型:

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数据不会出现,因为我返回:仅完成,因此获得输出:"完成")

案例b。如果我喜欢这样:获取错误:没有足够的方法适用于方法:(n:Int)models.Testname in trait LinearSeqOptimized。未指定的值参数n。我真的不确定如何才能得到我的答复?

控制器:

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.
    }
  }

请告诉我如何获得回复?

1 个答案:

答案 0 :(得分:0)

struts.xml方法不返回任何内容(getJsonValuesFromTable)。要解决此问题,请将此方法的更改定义为

Unit

或明确设置类型:

def getJsonValuesFromTable(testContent: TestContent) = {

另外,作为让客户知道您要返回json的下一步,您应该设置内容类型:

def getJsonValuesFromTable(testContent: TestContent): Unit = {