如何在喷雾中将所有拒绝转换为自定义 json?
Posted
技术标签:
【中文标题】如何在喷雾中将所有拒绝转换为自定义 json?【英文标题】:How do I turn all rejections into custom json in spray? 【发布时间】:2013-05-31 12:45:27 【问题描述】:当 spray (spray.io) 产生拒绝时,它会以字符串体响应。由于我所有的 API 客户端都会假设我的 API 只返回 json,因此我希望在全局范围内将每个拒绝都设为符合我们的错误对象格式的有效 json 对象。我怎样才能做到这一点?
错误对象格式如下所示
'details' : 'Something happened in the app. boooo!',
'errorType' : 'Unknown'
errorType 是我的内部枚举样式值列表,例如 UserNotFound
和 NeedPaidAccount
【问题讨论】:
【参考方案1】:如果您只想将所有拒绝转换为您的自定义 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
【讨论】:
目前看来fromPF
不存在。 RejectionHandler
按预期工作。以上是关于如何在喷雾中将所有拒绝转换为自定义 json?的主要内容,如果未能解决你的问题,请参考以下文章
我们可以在 javascript 中将通用对象转换为自定义对象类型吗?