MOXy JAXB:如何使用具有不同精度的BigDecimalAdapter

时间:2012-05-10 09:18:36

标签: jaxb eclipselink moxy

我有一个BigDecimalAdapter来格式化我模型的所有BigDecimal类型。 package-info文件中的声明是:

@XmlJavaTypeAdapters({@XmlJavaTypeAdapter(value=BigDecimalAdapter.class,type=BigDecimal.class)})

我的问题是我必须使用不同的预测格式化几个BigDecimal。

例如,我有两个对象:

public class Invoice {

    @XmlPath("InvoiceTotals/InvoiceTotal/text()")
    private BigDecimal invoiceTotal;
}

public class Discount {

    @XmlPath("DiscountAmount/text()")
    private BigDecimal discountAmount;

}

现在,如果值为:

invoice.invoiceTotal = 10.000000000;
discount.discountAmount = 25.00000000;

如何在最终的XML中获得下一个结果?

<invoiceTotal>10.00<invoiceTotal/>
<discountAmount>25.0000<discountAmount/>

我的意思是,第一种情况下是2位小数,第二种情况下是4位小数。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您需要为XmlAdapter的每个表示引入BigDecimal。然后,您需要在属性级别注册它们,而不是在包级别注册XmlAdapter。以下是一个例子。

<强>发票

public class Invoice {

    @XmlPath("InvoiceTotals/InvoiceTotal/text()")
    @XmlJavaTypeAdapter(value=BigDecimalTwoPlacesAdapter.class)
    private BigDecimal invoiceTotal;
}

<强>折扣

public class Discount {

    @XmlPath("DiscountAmount/text()")
    @XmlJavaTypeAdapter(value=BigDecimalFourPlacesAdapter.class)
    private BigDecimal discountAmount;

}