V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
voidxx
V2EX  ›  Java

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

  •  
  •   voidxx · 2020-06-03 16:42:13 +08:00 · 2332 次点击
    这是一个创建于 1633 天前的主题,其中的信息可能已经有所发展或是发生改变。

    RT

    后端定义

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

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

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

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

    10 条回复    2020-06-04 14:06:00 +08:00
    virusdefender
        1
    virusdefender  
       2020-06-03 16:51:24 +08:00
    前端处理小数可能也会遇到精确度的问题,不如还是用分为单位
    voidxx
        2
    voidxx  
    OP
       2020-06-03 16:53:24 +08:00
    @virusdefender #1 后端已转成 String 了,前端一样用 String 接收就好了
    TtTtTtT
        3
    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
        4
    voidxx  
    OP
       2020-06-03 17:01:07 +08:00
    @TtTtTtT #3 多谢。
    现在是另外加了一个字段来做的,在代码里自己转。
    guyeu
        5
    guyeu  
       2020-06-03 17:03:47 +08:00
    你应该自定义自己的金额类,然后给这个金额类添加一个自定义的序列化器,常见的 json 库都支持自定义序列化器。
    k9990009
        6
    k9990009  
       2020-06-03 18:57:09 +08:00 via Android
    有的,之前写过处理小数保留的位数,你找下这个,单独写个类自己处理输出
    axbx
        7
    axbx  
       2020-06-04 10:10:11 +08:00
    自定义注解,返回的时候修改一下不就行了
    ruyu
        8
    ruyu  
       2020-06-04 10:15:51 +08:00
    用 xml

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

    然后通过 type 判断就好啦
    Aresxue
        9
    Aresxue  
       2020-06-04 10:18:07 +08:00
    你这种情况前后之间交互就应该用分,这样只需要使用整数,然后让前端自己转就好了
    Cinleoi
        10
    Cinleoi  
       2020-06-04 14:06:00 +08:00
    加一个 DTO 不就行了吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1911 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:15 · PVG 00:15 · LAX 08:15 · JFK 11:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.