2017-08-25 29 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); 
}