【问题标题】:Serializing double to int将double序列化为int
【发布时间】:2017-08-25 18:19:17
【问题描述】:

我有一个类似的 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 字符串时,数量为 500,那么它的输出为 500.0。我想得到 500 而不是 500.0。

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

我可以知道如何使用 Jackson 库来做到这一点吗?

【问题讨论】:

  • 但是500500.0
  • 你的问题没有意义。当您反序列化时,您最终会得到 pojo 类的对象。那些有双重领域。因此,该值最终将成为双倍。因此:不清楚你在问什么。
  • 没有库可以做你要求做的事情,因为大多数情况下,它没有任何意义。你得到你序列化的对象。然后你可以用它做任何你想做的事情,包括在需要时强制转换值。
  • 您是否可能只想将此数字打印/显示为“500”?数字如何表示的问题?
  • 也许混淆是因为他在谈论反序列化,但似乎他真的在谈论序列化为 JSON。

标签: java json serialization jackson


【解决方案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);
}

【讨论】:

    【解决方案2】:

    你有另一个选择,它不是很干净(老实说,我很想听到比这更干净的解决方案);

    public class FooDTO {
       private int amount;
    
       public int getAmount() {
         return amount;
       }
    
       public void setAmount(double amt) {
         amount = (int) amt;
       }
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多