Jackson 對貨幣字段的系列化實現

一、問題描述

     項目中要求商品金額字段在頁面上使用 ¥10,000,000.00 方式進行展現。 首先想到了一個笨方法,就是新增貨幣的String 類型字段用以顯示格式化後的金額。但是這種方式有一個缺點。。。 如果在你的實體類中有大量金額類型字段需要格式化顯示,那麼你就需要創建多個同等的String 字段並且編寫轉換代碼完成數據輸出。經過翻閱資料發現可以利用 Jackson 中的自定義類型序列化功能來實現這個需求。


二、代碼部分

1. 實體類

public class Goods implements Serializable {

    private int id;

    private String goods_code;

    private String goods_name; // 中文名稱

    private String goods_enname; // 英文名稱

    private String imgurl;

    @JsonSerialize(using = MoneySerializer.class)
    private BigDecimal goods_price;

    @JsonSerialize(using = MoneySerializer.class)
    private BigDecimal original_price; // 原價

    private String keyword; // 關鍵字

    private int cate_id;

    private String cate_name; // 分類名稱

    private String cate_en; // 英文分類名稱

    private int kind_id;

    private int brand_id;

    private  String brand_name; // 品牌名稱

    private int quality_id;

    private int color_id;

    private String size;

    private String content;

    private boolean is_Reserve;

    private Date add_time;

    private boolean is_sale;

    private boolean is_delete;

    private boolean is_price;

    private int sort;

    private boolean stock; // 是否有現貨


    // some get and set。。。。
}

2. 類型轉換器

/**
 * 貨幣格式化
 */
public class MoneySerializer extends JsonSerializer<BigDecimal> {

    @Override
    public void serialize(BigDecimal val, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        NumberFormat currency = NumberFormat.getCurrencyInstance();
        currency.setMinimumFractionDigits(2); //設置數的小數部分所允許的最小位數(如果不足後面補0)
        currency.setMaximumFractionDigits(2); //設置數的小數部分所允許的最大位數(如果超過會四捨五入)
        jsonGenerator.writeString(currency.format(val));
    }
}

3. 轉換結果


三、其他

    您可以配置使用特定類型的客戶序列化程序的模塊,而不是在每個成員或getter上設置@JsonSerialize:

SimpleModule module = new SimpleModule();
module.addSerializer(BigInteger.class, new ToStringSerializer());
objectMapper.registerModule(module);

     在上面的例子中,我使用字符串序列化器來序列化BigIntegers(因爲javascript無法處理這樣的數值)。

 

參考鏈接: http://landcareweb.com/questions/17773/java-to-jackson-jsonxu-lie-hua-moneyzi-duan

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章