将double序列化为int

时间:2017-08-25 18:19:18

标签: java json serialization jackson

我有像POJO一样的

public class Foo {
private double amount;

private String message;

public double getAmount() {
    return amount;
}

public void setAmount(double amount) {
    this.amount = amount;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

}

当我使用Jackson将这个Foo对象序列化为JSON String时,其数量为500,那么它将以500.0的形式出现。我想获得500而不是500.0。

一种解决方案是将其类型更改为int,但是我无法修改该类。

我可以知道如何使用杰克逊图书馆这样做吗?

2 个答案:

答案 0 :(得分:1)

你有另一个选择,这不是很干净(诚实,我希望听到比这更清洁的解决方案);

public class FooDTO {
   private int amount;

   public int getAmount() {
     return amount;
   }

   public void setAmount(double amt) {
     amount = (int) amt;
   }
}

现在您可以在设置金额后序列化FooDTO。 (请为其他属性添加getter和setter。

答案 1 :(得分:1)

查看此页面以获取有关创建自定义序列化程序的演示:

http://www.baeldung.com/jackson-custom-serialization

一种可能的解决方案是为Double.class创建一个自定义序列化程序,它可以选择将Integer传递给JsonGenerator。

我已经对此进行了测试并发现它可以正常工作:

@Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider provider) throws IOException {
    if (value.intValue() == value)
        gen.writeNumber(value.intValue());
    else
        gen.writeNumber(value);
}