在JAXB编组中使用BigDecimal

12

我有一个使用JAXB字段注释的REST Web服务。

例如,

@XmlAccessorType(XmlAccessType.PROPERTY)
public class MyClass{
  private BigDecimal sum;
  //+ getter and setter
}
如果字段"sum"包含很大的值,例如1234567890.12345,则它将解析为1.23456789012345E9。如何编写一个规则仅用于此类解析?

如果字段“sum”中的值较大,例如1234567890.12345,则它会被转换为科学计数法表示的形式1.23456789012345E9。如何编写一个规则只对该类情况进行转换?

2个回答

21

创建适配器

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

2
你需要编写一个 XmlAdapter<String, BigDecimal> 并在 sum 的 getter 方法上添加注解:@XmlJavaTypeAdapter(BigDecimalStringAdapter.class)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接