java jackson 序列化,Java to Jackson JSON序列化:Money字段

Currently, I'm using Jackson to send out JSON results from my Spring-based web application.

The problem I'm having is trying to get all money fields to output with 2 decimal places. I wasn't able to solve this problem using setScale(2), as numbers like 25.50 are truncated to 25.5 etc

Has anyone else dealt with this problem? I was thinking about making a Money class with a custom Jackson serializer... can you make a custom serializer for a field variable? You probably can... But even still, how could I get my customer serializer to add the number as a number with 2 decimal places?

解决方案

You can use a custom serializer at your money field. Here's an example with a MoneyBean. The field amount gets annotated with @JsonSerialize(using=...).

public class MoneyBean {

//...

@JsonProperty("amountOfMoney")

@JsonSerialize(using = MoneySerializer.class)

private BigDecimal amount;

//getters/setters...

}

public class MoneySerializer extends JsonSerializer {

@Override

public void serialize(BigDecimal value, JsonGenerator jgen, SerializerProvider provider) throws IOException,

JsonProcessingException {

// put your desired money style here

jgen.writeString(value.setScale(2, BigDecimal.ROUND_HALF_UP).toString());

}

}

That's it. A BigDecimal is now printed in the right way. I used a simple testcase to show it:

@Test

public void jsonSerializationTest() throws Exception {

MoneyBean m = new MoneyBean();

m.setAmount(new BigDecimal("20.3"));

ObjectMapper mapper = new ObjectMapper();

assertEquals("{\"amountOfMoney\":\"20.30\"}", mapper.writeValueAsString(m));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值