【发布时间】:2015-08-15 04:30:39
【问题描述】:
我正在使用带有 anorm/pgsql 的 play 框架来创建一个调查应用程序。由于某些响应具有嵌套响应类型,因此对问题的响应以 JSONB 格式保存。我可以通过 POST'ing 到我的 routes.conf 文件中定义的路由来保存对单个问题的响应,但是我无法思考如何创建逻辑以一次接受多个问题的逻辑。基本上,当单击调查上的“下一步”按钮时,将发布 2-n 个问题的答案。我有如下代码,但目前不确定如何使用 POST 对其进行测试:
def jsonSaveMany(userResponses:List[Response],email:String,id:Long) = {
DB.withConnection{
implicit c =>
for (response <- userResponses) jsonSave(response,response.useremail,response.id)
}
}
def jsonSave(usersResponse:Response,email:String,id:Long) = {
DB.withConnection{
implicit c =>
val userResponse=usersResponse.response
val userJson:String = s"""{"response":"$userResponse"}"""
val pgObject = new PGobject();
pgObject.setType("jsonb")
pgObject.setValue(userJson)
SQL(s"INSERT INTO responses(response,useremail,questionid) values ({userResp},{eMail},{quesId})")
.on('userResp -> anorm.Object(pgObject), 'eMail -> s"$email",'quesId -> id)
.executeInsert(SqlParser.scalar[String].singleOpt)
}
}
我一直在使用 Twirl 模板引擎测试的视图文件采用 @(responseForm: Form[Response]) 参数,但基本上我需要能够为其提供一个 Form[Response] 类型的列表,其中列表的范围可以是 2-n 个问题.我似乎找不到更好的方法来制定这个,甚至无法测试这个逻辑是否有效。我不确定如何在我用来测试的 scala.html 文件中创建一个 Form[Response] 列表。
我最近尝试的另一种方法是在响应案例类的伴随对象中使用 JSON inception,如下所示:implicit val responseReads = Json.reads[Response] 但我无法通过 CURL 测试发布到此,因为当我没有任何响应时POST 到我为此函数定义的路由。
我的问题基本上是,我如何利用地图类型的功能来获取每个问题并将响应保存到数据库并通过简单的前端 GUI 或终端的基本 CURL 进行测试?
【问题讨论】:
-
你试过哪个代码?
-
我已经实现了隐式 Json.reads 以及 jsonSaveMany() 函数。我的问题基本上是如何检查它是否工作......当我从终端卷曲时,即使对于我已经工作的路线,我也看不到与使用浏览器时相同的输出。如果我可以有一个简单的前端文本输入,在“提交”上提交 JSON,这将帮助我知道我的隐式阅读器是否工作
-
我在使用 jsonSaveMany() 函数时遇到的问题是我不确定如何在 scala.html 文件中包含可变长度的响应类型列表,我可以使用这些文件将数据发回服务器。我在使用 jsonSave 函数的 scala.html 文件中实现了单个响应 GUI,这适用于单个问题响应。
-
我尝试添加一个文本字段并将 JSON 对象直接放入其中并像 {"useremail":"my@email.com","response":"myAnswer"} 那样发布它我得到了POST noSuchElementException None.get 的内部服务器错误
标签: json playframework anorm