Попытка определить веб-сервис Scalatra с параметрами JSON

Я пытаюсь определить веб-сервис, используя Scalatra, где параметры передаются в теле, желательно в виде 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 и имел параметры в теле?

В основном я пытаюсь ограничить то, что входит в журнал доступа к веб-серверу.


person James Black    schedule 29.08.2012    source источник


Ответы (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() может читать то, что было передано.

Тест spec2 есть, и если за ним следует get, он возвращает правильную информацию.

  "PUT /phaseupdate" should {
    "return status 200" in {
      put("/phaseupdate", Map("filename" -> "test1", "entryaddress" -> "address1", "name" -> "starting", "percentcomplete" -> "10")) {
        status must_== 200
      }
    }
  }
person James Black    schedule 30.08.2012