Директива Spray.io не регистрируется?

Я хочу получить доступ к пути users/{id}/permission через маршрут Spray, используя метод POST. По какой-то причине (и я пробовал разные конфигурации) он не регистрирует маршрут, и я получаю 405 METHOD NOT ALLOWED.

Приведенный ниже код является частью pathPrefix «users». GET работает, а POST нет.

path(Rest / "permission") { id =>
        /**
         * save permissions object for a user
         */
        post {
          entity(as[String]) { body =>
              try {
                val uperm = parse[UserPermission](body)
                UserPermission.store(uperm)
                respondWithMediaType(`application/json`) {
                  complete {
                    generate(uperm)
                  }
                }
              } catch {
                case e: com.codahale.jerkson.ParsingException =>
                  complete {
                    HttpResponse(BadRequest, "Submitted malformed data.")
                  }
              }
          }
        } ~
          /**
           * grab permissions for a single user
           */
        get {
          try {
            val uperm = UserPermission.fetch(id)
            respondWithMediaType(`application/json`) {
              complete {
                generate(uperm)
              }
            }
          } catch {
            case e: java.lang.NullPointerException =>
              complete {
                HttpResponse(NotFound, "Object not found.")
              }
          }
        }
      } ~

Я что-то упустил здесь?


person crockpotveggies    schedule 07.02.2013    source источник


Ответы (1)


Вы не должны использовать «Rest» таким образом, вместо этого попробуйте «PathElement»:

path(PathElement / "permission") { id =>
  ...
}

Если это Int, используйте IntNumber, но Rest - это если вы хотите сопоставить «остальную часть» URL-адреса с концом... так что это не имеет смысла, как вы использовали, его следует поместить в конец.

person Alois Cochard    schedule 10.02.2013
comment
Идеальное спасибо. Я действительно понял это после погружения в исходный код, забыл обновить вопрос: P - person crockpotveggies; 13.02.2013