flask REST-API:响应中的数字值错误

问题描述 投票:0回答:1

我正在将 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}

我测试了几个大数字,但总是得到错误的响应。

我在这里遗漏了什么或做错了什么?这个问题的解决方案看起来如何?

python rest flask httpresponse flask-restx
1个回答
1
投票

这是因为 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
© www.soinside.com 2019 - 2024. All rights reserved.