[akka-http] Can I get the last rejection and request context at the same time?

100 views
Skip to first unread message

yar....@gmail.com

unread,
May 15, 2015, 7:59:14 AM5/15/15
to akka...@googlegroups.com
Hi, hakkers!

I have a route like the following,
post {
entity(as[Profile]) { profile =>
...
}
}

and if entity is malformed or absent altogether, I want to give back a BadRequest with a useful body containing request details (which I need a request context for) and error messages from Unmarshaller (which I can get from rejection). Is it possible to get the last rejection and RequestContext at the same time?

yar....@gmail.com

unread,
May 21, 2015, 8:54:47 AM5/21/15
to akka...@googlegroups.com
It turns out it is, I wish examples in documentation depicted that:
val routeRejectionHandler = RejectionHandler.newBuilder().handle{ 
case MalformedRequestContentRejection(msg, _) ctx {
val method = ctx.request.method
val uri = ctx.request.getUri()
val entity = Await.result(ctx.request.entity.toStrict(1.second), 1.second).data.decodeString("UTF-8")
val msg = s"Malformed request body $entity in request $method $uri"
ctx.log.error(msg)
ctx.complete(BadRequest -> s"Could not deserialize request body")
}
}.result
Reply all
Reply to author
Forward
0 new messages