最近何兄在使用Swagger UI时发现一个问题:一个由数字组成的字符串类型的参数(33028205011320003380),以表单POST测试时,数字的后几位会变,参数变成了33028205011320005000。我的第一反应是js的数字精度问题,Swagger UI把字符串当数字处理了。经过排查,果然在swagger-ui-bundle.js文件中找到了问题所在。
try {
u = JSON.parse(a[i])
} catch {
u = a[i]
}
buildRequest方法中,在已经知道POST提交的是表单的情况下,仍然先尝试转换为JSON对象,如果失败才用原始值。字符串经过JSON.parse方法处理后返回的就是一个数字了,而js中数字的精度有限,就导致了这个问题。这个代码片段的源代码地址在:https://github.com/swagger-api/swagger-js/blob/master/src/execute/oas3/build-request.js#L69
看了一下swagger官方对这个代码仓库也没有怎么维护,好多is