2016-04-03 6 views
0

以下のコードはエラーなしで完了するようですが、stack.can.server.HttpServerConnectionは、If-Matchヘッダーに特定の形式が必要です。
私はおそらく拒否ハンドラが不足していると感じますか?または何かを消さなければならないのですか?ハッシュ関数を使用したオプティミスティックロック

すべてのアイデア?

api 22:29:56.251 | WARN | root-actor-system-akka.actor.default-dispatcher-4 | akka://root-actor-system/user/IO-HTTP/listener-0/2 | spray.can.server.HttpServerConnection | Illegal request header: Illegal 'If-Match' header: Invalid input 's', expected $timesIf$minusMatch (line 1, pos 1): somehashfunctionvalue 

ルート:

override def putObjectRoute = (path("api"/"models"/Segment/"objects") & authenticatedJsonRoute) { 
    (modeledSystemName, tenantName, authInfo) => 
     put { 
     entity(as[ModeledObject]) { obje => 
      etag(obje, hashfunction) { 
      onComplete(service.updateObject(modeledSystemName, tenantName, obje)) { 
       case Success(_) => complete(NoContent) 
       case Failure(ex) => 
       log.error(ex.getMessage) 
       complete(InternalServerError, s"An error occurred: ${ex.getMessage}") 
      } 
      } 
     } 

指令:

trait OCCETag { 

    def etag[T](entity: T, f: (String, T) => Boolean): Directive0 = optionalHeaderValueByName("If-Match").flatMap { 
    case Some(etag) => mapInnerRoute { route => 
     val e = entity 
     ctx => { 
     def complete304() = ctx.complete(HttpResponse(NotModified)) 
     def complete412() = ctx.complete(PreconditionFailed) 
     if (f(etag, e)) pass else complete412() 
     } 
    } 
    case None => reject(MissingHeaderRejection("If-Match")) 
    } 
} 
+0

解決策が見つかりました。私はリーダールート(ctx)にパスを変更しました。 – adam

答えて

0

私は解決策を見つけました。私はリーダールート(ctx)にパスを変更しました。基本的に、このパスは指示を完全に伝えるものではありません。

関連する問題