2012-12-17 16 views
8

Tôi có một dịch vụ web REST với các chú thích trường JAXB. Ví dụ,Sử dụng BigDecimal trong JAXB marshalling

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

Nếu trường "tổng" chứa giá trị lớn, ví dụ, 1234567890,12345, nó Marshalls để 1.23456789E9 Làm thế nào để viết một quy tắc cho marshalling chỉ lớp này?

Trả lời

14

Tạo bộ chuyển đổi

puclic class BigDecimalAdaptor implements XmlAdapter<String, BigDecimal> 

và sử dụng cho (XmlAccessType.FIELD) truy cập

@XmlJavaTypeAdapter(BigDecimalAdaptor.class) 
private BigDecimal sum; 

và cho (XmlAccessType.PROPERTY) truy cập

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

adapter có thể được như

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

Bạn viết XmlAdapter<String, BigDecimal> và bạn chú thích bộ thu thập tổng cộng với nó: @XmlJavaTypeAdapter(BigDecimalStringAdapter.class).