有没有相关 JSON 注解,可以在数据返回前端时,把以分为单位的金额数字转换成以元为单位的字符串

2020-06-03 16:42:13 +08:00
 voidxx

RT

后端定义

{
    @ApiModelProperty(name = "转账金额,单位(分)")
    private Long transAmount;
    @ApiModelProperty(name = "退款金额,单位(分)")
    private Long refundAmount;
}

因为需要做金额的统计,所以数据库设计成了 bigint 类型,以分为单位,查询出来用 Long 接收

有没有相关 JSON 注解,可以把以分为单位的金额数字转换成以元为单位的字符串,返回给前端。

如:888(分) -> 8.88 (元)

2326 次点击
所在节点    Java
10 条回复
virusdefender
2020-06-03 16:51:24 +08:00
前端处理小数可能也会遇到精确度的问题,不如还是用分为单位
voidxx
2020-06-03 16:53:24 +08:00
@virusdefender #1 后端已转成 String 了,前端一样用 String 接收就好了
TtTtTtT
2020-06-03 16:58:10 +08:00
推荐加一个新的只读字段来序列化,这样不会影响模型的反序列化。

如果觉得麻烦的话,可以加一个自定义的序列化器。

https://fasterxml.github.io/jackson-databind/javadoc/2.7/com/fasterxml/jackson/databind/annotation/JsonSerialize.html
voidxx
2020-06-03 17:01:07 +08:00
@TtTtTtT #3 多谢。
现在是另外加了一个字段来做的,在代码里自己转。
guyeu
2020-06-03 17:03:47 +08:00
你应该自定义自己的金额类,然后给这个金额类添加一个自定义的序列化器,常见的 json 库都支持自定义序列化器。
k9990009
2020-06-03 18:57:09 +08:00
有的,之前写过处理小数保留的位数,你找下这个,单独写个类自己处理输出
axbx
2020-06-04 10:10:11 +08:00
自定义注解,返回的时候修改一下不就行了
ruyu
2020-06-04 10:15:51 +08:00
用 xml

<transAmount type="currency">10</transAmount>
<refundAmount type="currency">20</transAmount>

然后通过 type 判断就好啦
Aresxue
2020-06-04 10:18:07 +08:00
你这种情况前后之间交互就应该用分,这样只需要使用整数,然后让前端自己转就好了
Cinleoi
2020-06-04 14:06:00 +08:00
加一个 DTO 不就行了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/678309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX