我正在使用 Connexion ( https://github.com/zalando/connexion ) 来确保我的 openapi 规范得到很好的遵循,并有简单的集成点来将我的路由连接到底层函数。
在任何情况下,来自 Connexion 的默认错误响应都是遵循HTTP API 的问题详细信息RFC 的 json 响应。即以下格式,例如:
{
"detail": "None is not of type 'object'",
"status": 404,
"title": "BadRequest",
"type": "about:blank"
}
但是,我想将发送的所有错误的格式更改为:
{
error: {
code: 400,
message: 'BadRequest',
detail: 'ID unknown'
innererror: {...}
}
}
我找不到任何方法来拦截每个错误以更改返回的格式。我知道我可以扩展类并在其构造函数中connection.exception.ProblemException
向参数添加一个字典,但是对于任何错误,例如,我无法拦截它。ext
400
所以,我知道可以为特定的错误代码添加错误处理程序,例如:
app.add_error_handler(404, error.normalize)
app.add_error_handler(400, error.normalize)
但是,对于404
处理程序,我设法成功拦截了错误。但是对于400
(例如 json 验证错误) - 拦截不起作用。
如何拦截从 Connexion 发送的每个错误并更改 json 格式,即使它只是将其扩展为:
{
"detail": "Could not find page",
"error": {
"code": 404,
"message": "Could not find requested document."
},
"status": 404,
"title": "NotFound",
"type": "about:blank"
}
我使用带有“龙卷风”服务器的 Connexion。
提前致谢。汤姆