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

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

  •  
  •   voidxx · 38 天前 · 1049 次点击
    这是一个创建于 38 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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   38 天前
    前端处理小数可能也会遇到精确度的问题,不如还是用分为单位
    voidxx
        2
    voidxx   38 天前
    @virusdefender #1 后端已转成 String 了,前端一样用 String 接收就好了
    TtTtTtT
        3
    TtTtTtT   38 天前
    推荐加一个新的只读字段来序列化,这样不会影响模型的反序列化。

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

    https://fasterxml.github.io/jackson-databind/javadoc/2.7/com/fasterxml/jackson/databind/annotation/JsonSerialize.html
    voidxx
        4
    voidxx   38 天前
    @TtTtTtT #3 多谢。
    现在是另外加了一个字段来做的,在代码里自己转。
    guyeu
        5
    guyeu   38 天前
    你应该自定义自己的金额类,然后给这个金额类添加一个自定义的序列化器,常见的 json 库都支持自定义序列化器。
    k9990009
        6
    k9990009   38 天前 via Android
    有的,之前写过处理小数保留的位数,你找下这个,单独写个类自己处理输出
    axbx
        7
    axbx   38 天前
    自定义注解,返回的时候修改一下不就行了
    ruyu
        8
    ruyu   38 天前
    用 xml

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

    然后通过 type 判断就好啦
    Aresxue
        9
    Aresxue   38 天前
    你这种情况前后之间交互就应该用分,这样只需要使用整数,然后让前端自己转就好了
    Cinleoi
        10
    Cinleoi   37 天前
    加一个 DTO 不就行了吗
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2554 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 04:21 · PVG 12:21 · LAX 21:21 · JFK 00:21
    ♥ Do have faith in what you're doing.