gpt4 book ai didi

python - 如何使用 Connexion + Tornado 更改所有错误的错误格式

转载 作者:行者123 更新时间:2023-12-02 05:19:50 25 4
gpt4 key购买 nike

我使用 Connexion ( https://github.com/zalando/connexion ) 来确保我的 openapi 规范得到很好的遵循,并具有简单的集成点来将我的路由连接到底层函数。

无论如何,Connexion 的默认错误响应都是 Problem Details for HTTP APIs 之后的 json 响应。 RFC。即以下格式,例如:

{
"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,带有“ Tornado ”服务器。

提前致谢。汤姆

最佳答案

使用最新版本(connexion==2.5.1),这对我有用:

from connexion import ProblemException
[...]

connexion_app.add_error_handler(400, render_http_exception)
connexion_app.add_error_handler(404, render_http_exception)
connexion_app.add_error_handler(ProblemException, render_problem_exception)

我的异常处理函数:

from flask import jsonify


def render_http_exception(error):

resp = {
'error': {
'status': error.name,
'code': error.code,
'message': error.description,
}
}

return jsonify(resp), error.code


def render_problem_exception(error):

resp = {
'error': {
'status': error.title,
'code': error.status,
'message': error.detail,
}
}

return jsonify(resp), error.status

您可以轻松地将其更改为您的格式。

关于python - 如何使用 Connexion + Tornado 更改所有错误的错误格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55053657/

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