Java 将double序列化为int
我有一个像POJO一样的Java 将double序列化为int,java,json,serialization,jackson,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 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 library做到这一点吗?您还有另一个选择,它不是很干净(老实说,我希望听到比这更干净的解决方案)
现在,您可以在设置数量后序列化FooDTO。(请为您的其他属性添加getter和setter。查看此页面以获取有关创建自定义序列化程序的演示: 一个可能的解决方案是为Double.class创建一个自定义序列化程序,它可以在适当的情况下将一个整数传递给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);
}
但是
500
是500.0
。你的问题没有意义。当你反序列化你的pojo类的对象时,这些对象有两个字段。因此,值将变成一个双字段。因此:不清楚你在问什么。没有库来做你要求做的事情,因为大多数情况下,它没有任何意义。您将获得序列化的对象。然后,您可以对其执行任何操作,包括在需要时强制转换值。您是否只希望将此数字打印/显示为“500”?这是一个数字如何表示的问题?也许混淆是因为他在谈论反序列化,但似乎他真的在谈论序列化到JSON。
@Override
public void serialize(Double value, JsonGenerator gen, SerializerProvider provider) throws IOException {
if (value.intValue() == value)
gen.writeNumber(value.intValue());
else
gen.writeNumber(value);
}