Java中BigDecimal的GSON序列化问题

xzabzqsa  于 2022-11-06  发布在  Java
关注(0)|答案(2)|浏览(305)

需要将JSON字符串转换为Java对象。

  1. {
  2. "amount":1.0000
  3. }

我正在尝试使用GSON.fromjson(response,Amount.class)转换字符串;
此值在对象中已更改为1.0请帮助解决此问题
我在objectmapper中也尝试了同样的操作。它不起作用

ukqbszuj

ukqbszuj1#

考虑您的Amount类如下所示:

  1. class Amount {
  2. private BigDecimal amount;
  3. public BigDecimal getAmount() {
  4. return amount;
  5. }
  6. }

ObjectMapper已正确解析它。

  1. @Test
  2. void amountPrecisionTest() throws IOException {
  3. Amount amount = new ObjectMapper().readValue("{\"amount\":1.0000}", Amount.class);
  4. assertEquals(BigDecimal.valueOf(1.0000).setScale(4), amount.getAmount());
  5. }
展开查看全部
gg0vcinb

gg0vcinb2#

你应该写自定义seriliazer,像这样:

  1. public class SerializerBigDecimal extends JsonSerializer<BigDecimal> {
  2. @Override
  3. public void serialize(BigDecimal value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
  4. if(Objects.isNull(value)) {
  5. gen.writeNull();
  6. } else {
  7. // take the floor value
  8. gen.writeNumber(value.setScale(4, RoundingMode.FLOOR));
  9. }
  10. }
  11. }

然后在POJO中的"amount"字段上添加注解:

  1. @JsonSerialize(using = SerializerBigDecimal.class)
  2. private BigDecimal amount;
展开查看全部

相关问题