快捷搜索:  汽车  科技

springboot特定参数限流(SpringBoot传输Long类型精度损失)

springboot特定参数限流(SpringBoot传输Long类型精度损失)在Spring容器中,大部分bean都是以单例形式存在的,只要知道这点便可推知如果我们想更改一些bean默认的全局配置,我们只需将所需bean取出来进行更改即可。根据这点我对自定义ObjectMapper的解决方案优化成以下这个样子:个人解决方案但其实我只想处理Long类型,都转字符串似乎有点多余了。麻烦。这个方案已经可以符合我的目的了:Long精度不损失、数字类型只有Long转为字符串。但这个方案看起来好像还是有点麻烦,于是我便根据这个方案改成个人认为观感更简单的配置。

起因

在使用Mybatis Plus的雪花算法生成Long类型id时发现Swagger返回id与数据库的id不一致,但直接访问URL接口时返回的id却是正确的,即数据库id与URL访问返回的id一致,仅Swagger不一致,也许这就是买家秀(Swagger)与卖家秀(数据库 接口URL),至于原因嘛...

springboot特定参数限流(SpringBoot传输Long类型精度损失)(1)

百度一下,结论为:js的number最大值为9007199254740992,所以swagger的显示也会出错。如下2图,Swagger显示的是错误的id,url直接请求则返回正确的。

springboot特定参数限流(SpringBoot传输Long类型精度损失)(2)

springboot特定参数限流(SpringBoot传输Long类型精度损失)(3)

百度解决方案

  • application.yml添加以下jackson配置数字类型都转为字符串返回:

springboot特定参数限流(SpringBoot传输Long类型精度损失)(4)

但其实我只想处理Long类型,都转字符串似乎有点多余了。

  • 注解

springboot特定参数限流(SpringBoot传输Long类型精度损失)(5)

麻烦。

  • 自定义ObjectMapper

springboot特定参数限流(SpringBoot传输Long类型精度损失)(6)

这个方案已经可以符合我的目的了:Long精度不损失、数字类型只有Long转为字符串。但这个方案看起来好像还是有点麻烦,于是我便根据这个方案改成个人认为观感更简单的配置。

个人解决方案

在Spring容器中,大部分bean都是以单例形式存在的,只要知道这点便可推知如果我们想更改一些bean默认的全局配置,我们只需将所需bean取出来进行更改即可。根据这点我对自定义ObjectMapper的解决方案优化成以下这个样子:

springboot特定参数限流(SpringBoot传输Long类型精度损失)(7)

SpringBoot的bean初始化完成后容器就会有全局默认的ObjectMapper bean,如果我们想更改全局序列化的方式,只需对这个bean动手就行。更改后在Swagger重新测试,成功转成字符串且避免精度损失。


springboot特定参数限流(SpringBoot传输Long类型精度损失)(8)

猜您喜欢: