0

Scalatra を使用して Web サービスを定義しようとしています。ここでは、パラメーターが本体に渡されます。できれば JSON として渡され、現在のように URL にすべてが含まれていません。

ですから、このテストに合格したいのですが、コメントアウトされたコードが現在合格しています。putコメントされていないコードは JSON ではありませんが、2 番目のパラメーターで Iterable が必要なため、テスト用に JSON を渡す方法もわかりません。

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本体にパラメーターを含めるように定義するにはどうすればよいでしょうか?

基本的に、Webサーバーのアクセスログに入る内容を制限しようとしています。

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 に答える