我正在将 Flask-restx 用于我的 REST-API。在那里,我注意到一个奇怪的行为,大整数值似乎返回错误。
我正在使用这个最小的代码片段来重现该问题:
@ns.route('/<id_>')
@ns.doc(params={"id_": "ID of a resource"})
class ResourceItem(Resource):
@staticmethod
@ns.doc(responses={200: "Success", 404: "Not found"})
def get(id_):
return 6195659448464973308, 200
响应正文中的预期内容(显然)是
6195659448464973308
。但实际反应是6195659448464973000
。
如果响应是以下形式的 json,也会发生同样的情况:
{"value": 6195659448464973308}
我测试了几个大数字,但总是得到错误的响应。
我在这里遗漏了什么或做错了什么?这个问题的解决方案看起来如何?
这是因为 javascript 处理大整数的方式。它使用 IEEE 754,您尝试返回的数字超出了它的 53 位限制精度(即 - 9007199254740991)。 我想不出任何优雅的解决方案部分将其作为字符串返回,然后在后端处理转换:
您可以尝试以下方法:
from flask_restx import Resource, Namespace
ns = Namespace('resources')
@ns.route('/<id_>')
@ns.doc(params={"id_": "Some ID"})
class ResourceItem(Resource):
@staticmethod
@ns.doc(responses={200: "Success", 404: "Not found"})
def get(id_):
# Here you can return the number as a string
return {"value": str(6195659448464973308)}, 200