gpt4 book ai didi

scala - akka-http API 中返回 JSON 错误

转载 作者:行者123 更新时间:2023-12-01 15:55:02 24 4
gpt4 key购买 nike

在我正在编写的 API 中,即使出现错误,我也希望获取并返回 JSON。我试图弄清楚如何保留所有 default RejectionHandler行为,但将状态代码和文本转换为 JSON 对象。由于默认行为是在函数调用中指定的,而不是作为数据结构指定的,因此似乎执行此操作的唯一方法是转换其生成的结果的 HttpEntity。有没有简单的方法可以做到这一点?

最佳答案

您可以在 HttpService 中编写类似的内容

private val defaultRejectionHandler = RejectionHandler.default

implicit def myRejectionHandler =
RejectionHandler.newBuilder()
.handleAll[Rejection] { rejections ⇒

def prefixEntity(entity: ResponseEntity): ResponseEntity = entity match {
case HttpEntity.Strict(contentType, data) => {
import spray.json._
val text = ErrorResponse(0, "Rejection", data.utf8String).toJson.prettyPrint
HttpEntity(ContentTypes.`application/json`, text)
}
case _ =>
throw new IllegalStateException("Unexpected entity type")
}

mapResponseEntity(prefixEntity) {
defaultRejectionHandler(rejections).getOrElse {
complete(StatusCodes.InternalServerError)
}
}
}.handleNotFound {
complete(StatusCodes.Forbidden -> ErrorResponse(StatusCodes.NotFound.intValue, "NotFound", "Requested resource is not found"))
}.result()

其中ErrorResponse可能是

case class ErrorResponse(error: ErrorInfo)
case class ErrorInfo(code: Int, `type`: String, message: String)

您可以为其定义 json 编码器。

关于scala - akka-http API 中返回 JSON 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com