2016-04-03 86 views
0

下面的代码似乎完成而没有错误,但是在堆栈sprayCan.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)。基本上这个过程并没有将上下文彻底交给指令。