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"))
}
}
Çözümü buldum. Okuyucu rotasına geçiş yaptım (ctx) – adam