J'ai besoin d'encoder des messages d'exception dans un format JSON spécifique dans mes réponses http. Je me demandais comment je pouvais attraper une exception DeserializationException sur ma route ou en dehors de celle-ci ou encoder l'exception DeserializationException.Gestion (sérialisation, en fait ..) DeserializationException dans akka-http
J'ai essayé les éléments suivants:
1) gestionnaire d'exception autour de mon itinéraire:
val exceptionHandler = ExceptionHandler {
case e: DeserializationException => complete(StatusCodes.BadRequest, ServiceBrokerError(e.getMessage))
}
2) format JSON portée implicite 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()
}
Aucune de ces faire une différence et DeserializationException
s sont toujours codés dans le corps de réponse http ci-dessous:
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
Toutes les suggestions sont grandement appréciées.
Certains context- supplémentaires mes itinéraires reposent sur l'intégration par pulvérisation JSON pour cartographier les entités demande à des objets, tels que:
// service instance management related routes
put {
entity(as[CreateInstance]) { createInstance => handleCreateInstance(s"cluster-$clusterId", createInstance) }
}
Merci pour la réponse. C'est la même sortie. Je ne pense pas que le problème soit l'encodage de l'objet ServiceBrokerError, ou du moins j'espérais qu'il y aurait quelque chose de connecté. – pgn