当spray(spray.io)产生拒绝时,它会以字符串形式响应。由于我所有的API客户端都将假定我的API仅返回json,因此我想全局地使每个拒绝都符合我们的错误对象格式的有效json对象。我怎样才能做到这一点?
错误对象格式如下所示
{
'details' : 'Something happened in the app. boooo!',
'errorType' : 'Unknown'
}
errorType是我的内部枚举样式的值列表,例如
UserNotFound
和NeedPaidAccount
最佳答案
如果您只想将所有拒绝项转换为自定义json格式,则可以创建一个拒绝处理程序。例如,我将其放在ServiceActor
中并执行以下操作:
class ApiServiceActor extends Actor with HttpServiceActor with ApiServices {
def jsonify(response: HttpResponse): HttpResponse = {
response.withEntity(HttpBody(ContentType.`application/json`,
JSONObject(Map(
"details" -> response.entity.asString.toJson,
"errorType" -> ApiErrorType.Unknown.toJson
)).toString()))
}
implicit val apiRejectionHandler = RejectionHandler {
case rejections => mapHttpResponse(jsonify) {
RejectionHandler.Default(rejections)
}
}
def receive = runRoute {
yourRoute ~ yourOtherRoute ~ someOtherRoute
}
}
关于json - 如何将所有拒绝内容转换为Spray中的自定义json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16929396/