2

POST および PUT リクエストには、次の構文を使用します。

put {
  entity(as[CaseClass]) { entity =>
     returnsOption(entity).map(result => complete{(Created, result)})
       .getOrElse(complete{(NotFound, "I couldn't find the parent resource you're modifying")})
  }
}

GET リクエストについても同じことをしようとしていますが、PUT ソリューションと同じように動作させることはできません。GET リクエストでこれを行う良い方法は何ですか?

更新:次のハックでこれを機能させました:

(get & parameters('ignored.?)) {
  //TODO find a way to do this without ignored parameters
  (ingored:Option[String]) => {
     returnsOption().map(result => complete(result))
       .getOrElse(complete{(NotFound, "")})
  }
 }

() =>orで同様のことが可能になると期待してctx =>いますが、マーシャリングに問題が発生するため、うまくいきません。

... could not find implicit value for evidence parameter of type spray.httpx.marshalling.Marshaller[(spray.http.StatusCodes.ClientError, String)]
    }).getOrElse(ctx.complete{(NotFound, "")})
                             ^

これは、私がspray-jsonを使用しているという事実に何らかの形で関連している可能性がありますか?

4

2 に答える 2

4

このコードは動作するはずです:

get {
  ctx =>  
     ctx.complete(returnsOption())
 }

最初に使用しない場合ctx =>、コードはルートのビルド時にのみ実行される可能性があります。

ここでいくつかの説明を見つけることができます: DSL 構造を理解する

于 2013-04-01T15:32:21.100 に答える