2016-04-03 16 views
0

Aşağıdaki kod hata olmadan tamamlanmış gibi görünüyor. Ancak, spray.can.server.HttpServerConnection yığınında belirli bir biçime sahip olmak için 'If-Match' başlığı istiyor.
Kendimi bir reddetme işleyicisi eksik olduğumu hissediyorum? Yoksa bir şeyi kapatmak zorunda mıyım?Karma işleviyle iyimser kilitleme

Herhangi bir Fikir?

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 

Rota:

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}") 
      } 
      } 
     } 

talimatı:

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

Çözümü buldum. Okuyucu rotasına geçiş yaptım (ctx) – adam

cevap

0

çözüm bulundu. Okuyucu rotasına geçiş yaptım (ctx). Temel olarak geçiş, içeriği yönerge tam olarak ele almaz.