2017-08-25 32 views
-3

我有一个POJO像序列化双为int

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; 
} 

}

在我使用杰克逊其中量为500则出来作为串行化500.0此Foo对象到JSON字符串。我想得到500而不是500.0。

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

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

+3

但是'500'是'500.0'。 – Kayaman

+0

你的问题没有意义。当你反序列化你最终得到pojo类的对象时。那些有双重领域。因此,价值最终会成为双倍。因此:不清楚你在问什么。 – GhostCat

+0

没有图书馆去做你要做的事情,因为大多数情况下,它没有任何意义。您将序列化的对象返回。然后你可以随心所欲地做任何事情,包括在需要时投射数值。 – Kon

回答

0

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

public class FooDTO { 
    private int amount; 

    public int getAmount() { 
    return amount; 
    } 

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

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

0

看看这个页面上创建自定义序列化的演示:

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

一个可能的解决方案是创建一个双自定义序列。类,其任选地通过一个整数,其中适当的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); 
}