0

我正在尝试使用Scalatra定义一个Web服务,其中参数在正文中传递,最好是JSON,而不是像我现在拥有的那样在url上包含所有内容。

所以,我希望这个测试通过,但是注释掉的代码是当前通过的。未注释的代码不是 JSON,但我也不确定如何通过 JSON 进行测试,因为put第二个参数中需要 Iterable。

class WebAppSpec extends MutableScalatraSpec {
  addServlet(classOf[WebApp], "/*")
  "PUT /phaseupdate" should {
    "return status 200" in {
      //put("/phaseupdate/test1/address1/starting/10") {
      put("/phaseupdate", Map("filename" -> "test1", "entryaddress" -> "address1","name" -> "starting","percentcomplete" -> "10")) {
        status must_== 200
      }
    }
}

我目前的错误定义是:

put("/phaseupdate/:filename/:entryaddress/:name/:percentcomplete") {
    val filename = params("filename")
    val entryaddress = params("entryaddress")
    val name = params("name")
    val percentcomplete = params("percentcomplete")

那么如何定义我的put服务来调用它PUT /phaseupdate并在正文中包含参数?

基本上,我试图限制进入网络服务器访问日志的内容。

4

1 回答 1

1

解决方案是这样做:

put("/phaseupdate") {
    val filename = if (params("filename").indexOf('.') > -1) params("filename").substring(0, params("filename").indexOf('.')) else params("filename")
    val entryaddress = params("entryaddress")
    val name = params("name")
    val percentcomplete = params("percentcomplete")

基本上,params()可以读取通过的内容。

specs2 测试是,如果这之后是 get 它返回正确的信息。

  "PUT /phaseupdate" should {
    "return status 200" in {
      put("/phaseupdate", Map("filename" -> "test1", "entryaddress" -> "address1", "name" -> "starting", "percentcomplete" -> "10")) {
        status must_== 200
      }
    }
  }
于 2012-08-30T14:46:54.220 回答