在JAXB编组中使用BigDecimal

时间:2012-12-17 08:08:42

标签: java rest jaxb marshalling

我有一个带有JAXB字段注释的REST Web服务。 例如,

@XmlAccessorType(XmlAccessType.PROPERTY)
public class MyClass{
  private BigDecimal sum;
  //+ getter and setter
}

如果字段“sum”包含大值,例如1234567890.12345,则它将组合为1.23456789012345E9 如何编写仅用于编组此类的规则?

2 个答案:

答案 0 :(得分:17)

创建适配器

puclic class BigDecimalAdaptor implements XmlAdapter<String, BigDecimal>

并用于(XmlAccessType.FIELD)访问

@XmlJavaTypeAdapter(BigDecimalAdaptor.class)
private BigDecimal sum;   

(XmlAccessType.PROPERTY)访问

@XmlJavaTypeAdapter(BigDecimalAdaptor.class)  
public getSum()
{
   return sum;
}

适配器可以像

public class BigDecimalAdapter extends XmlAdapter<String, BigDecimal>{

    @Override
    public String marshal(BigDecimal value) throws Exception 
    {
        if (value!= null)
        {
            return value.toString();
        }
        return null;
    }

    @Override
    public BigDecimal unmarshal(String s) throws Exception 
    {
       return new BigDecimal(s);
    }
}

答案 1 :(得分:2)

你写了一个XmlAdapter<String, BigDecimal>并用它来注释和的getter: @XmlJavaTypeAdapter(BigDecimalStringAdapter.class)