请求参数中的数字键
十二月 18, 2020
807
在请求参数中使用数字类型作为集合中的键。
背景
最近在业务中遇到一个坑:接口提供方用数字类型做集合的键,而大部分情况中数字类型会被转换成字符串类型,导致请求失败。
Java 类型表述:Map<Integer, List<String>>
转换成 JavaScript 对象如下:
|
但是通过请求传递后,后端接收到的却是:{ '996': ['福报', '肝就完了'], '965': ['养老', '工作生活平衡'] }
两种语言支持情况
JavaScript
: 支持,可以用 Number 类型做为 object 中的键。Java
:不支持,不能用 Interger 类型作为 Map 中的键。
ps: 这个后端肯定吃了空,手动做了层转化,无语…
三种请求类型支持情况
Post (JSON)
: 不支持,JSON 为了兼容 Java 等语言,会将数字类型解析成字符串类型。Post (form)
: 支持,以表单类型进行传参,Map 项会以Map[key]
的形式传递,且支持数字类型。Get (URL)
: 不支持,通过 URL Params 进行传参,后端默认会以字符串类型接收。
解决方案
- 让后端改回数字类型的键。别想了,人都找不到。
- 以 Post(form) 的形式请求。比较方便,但是只能统一用 Post 方式请求了。许多获取、查询类型的接口不用 Get 看起来很奇怪。
- 解析。在中间件中使用参数解析函数,通过深度遍历将所有 Map 的键转换成数字类型。
- 本文作者:zhaoo
- 本文链接:https://www.izhaoo.com/2020/12/18/number-key-for-params/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!
查看评论