2012-12-17 5 views
8

Ich habe einen REST-Webservice mit JAXB-Feldanmerkungen. Zum BeispielVerwenden von BigDecimal im JAXB-Marshalling

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

Wenn das Feld „Summe“ großer Wert enthält zum Beispiel 1234567890,12345, es zu 1.23456789E9 Marshalls Wie eine Regel zu schreiben, nur diese Klasse für Rangier-?

Antwort

14

Adapter erstellen

puclic class BigDecimalAdaptor implements XmlAdapter<String, BigDecimal> 

und verwenden für (XmlAccessType.FIELD) Zugang

@XmlJavaTypeAdapter(BigDecimalAdaptor.class) 
private BigDecimal sum; 

und für (XmlAccessType.PROPERTY) Zugang

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

Adapter wie

sein kann
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

Sie schreiben eine XmlAdapter<String, BigDecimal> und Sie kommentieren den Getter der Summe damit: @XmlJavaTypeAdapter(BigDecimalStringAdapter.class).