我需要在我的http響應中將異常消息編碼爲特定的JSON格式。我想知道如何在我的路由或其外部捕獲DeserializationException或編碼DeserializationException。處理(序列化,實際上..)在akka-http中的DeserializationException
我試過如下:
1)異常在我的路由處理:
val exceptionHandler = ExceptionHandler {
case e: DeserializationException => complete(StatusCodes.BadRequest, ServiceBrokerError(e.getMessage))
}
2)在隱含範圍JSON格式DeserializationException
implicit object DeserializationExceptionFormat extends DefaultJsonProtocol with RootJsonFormat[DeserializationException] {
def write(e: DeserializationException) = JsObject("message" -> JsString(e.getMessage))
def read(v: JsValue) = throw new NotImplementedError()
}
這些都不作任何區別和DeserializationException
s仍然編碼到下面的http響應正文中:
HTTP/1.1 400 Bad Request
Content-Length: 74
Content-Type: text/plain; charset=UTF-8
Date: Thu, 20 Apr 2017 21:23:11 GMT
Server: akka-http/10.0.1
The request content was malformed:
Node count may not be a floating number
任何建議,非常感謝。
一些額外的上下文我的路線依靠噴霧JSON整合到地圖請求實體對象,如:
// service instance management related routes
put {
entity(as[CreateInstance]) { createInstance => handleCreateInstance(s"cluster-$clusterId", createInstance) }
}
感謝您的回答。這是相同的輸出。我不認爲這個問題是ServiceBrokerError對象的編碼,或者至少我希望會有記錄的東西。 – pgn