I have a REST webservice with JAXB fields annotations. For example,
@XmlAccessorType(XmlAccessType.PROPERTY)
public class MyClass{
private BigDecimal sum;
//+ getter and setter
}
If field "sum" contains big value, for example, 1234567890.12345, it marshalls to 1.23456789012345E9 How to write a rule for marshalling only this class?
Create adaptor
puclic class BigDecimalAdaptor implements XmlAdapter<String, BigDecimal>
and use for (XmlAccessType.FIELD)
access
@XmlJavaTypeAdapter(BigDecimalAdaptor.class)
private BigDecimal sum;
and for (XmlAccessType.PROPERTY)
access
@XmlJavaTypeAdapter(BigDecimalAdaptor.class)
public getSum()
{
return sum;
}
adaptor can be like
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);
}
}
You write an XmlAdapter<String, BigDecimal>
and you annotate the getter of sum with it:
@XmlJavaTypeAdapter(BigDecimalStringAdapter.class)
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With