2012-12-17 19 views
8

Possiedo un servizio web REST con annotazioni dei campi JAXB. Per esempio,Utilizzo di BigDecimal nel marshalling JAXB

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

Se il campo "somma" contiene grande valore, per esempio, 1234567890,12,345 mila, si marshalling a 1.23456789E9 Come scrivere una regola per smistamento solo questa classe?

risposta

14

Crea adattatore

puclic class BigDecimalAdaptor implements XmlAdapter<String, BigDecimal> 

e utilizzare per l'accesso (XmlAccessType.FIELD)

@XmlJavaTypeAdapter(BigDecimalAdaptor.class) 
private BigDecimal sum; 

e per l'accesso (XmlAccessType.PROPERTY)

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

adattatore può essere come

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

Si scrive un XmlAdapter<String, BigDecimal> e si annota il getter della somma con: @XmlJavaTypeAdapter(BigDecimalStringAdapter.class).

Problemi correlati