我有这两个类:
@XmlAccessorType(XmlAccessType.FIELD)
public class OpportunityLocation
{
@XmlElement
private LatitudeLongitude coordinates;
[...]
}
public class LatitudeLongitude implements Serializable
{
private BigDecimal latitude;
private BigDecimal longitude;
[...]
}
当OpportunityLocation
被序列化时,我得到了
<location>
[...]
<coordinates>
<latitude>51.53684899999999657893567928113043308258056640625</latitude>
<longitude>-0.1325880000000000114024345521102077327668666839599609375</longitude>
</coordinates>
现在我被要求提供一个xsd来验证xml,我将latitude
和longitude
的类型设置为xsd:decimal但验证器抱怨
Element 'latitude': '51.53684899999999657893567928113043308258056640625' is not a valid value of the atomic type 'xs:decimal'.
(经度相同)
描述坐标的xsd片段是
<xs:complexType name="latitudeLongitude">
<xs:all>
<xs:element name="latitude" type="xs:decimal"/>
<xs:element name="longitude" type="xs:decimal"/>
</xs:all>
</xs:complexType>
我认为最好的解决方案是截断纬度/经度值,因为首先没有必要提高精度。
我如何指示JAXB这样做?
答案 0 :(得分:2)
或者只是使用BigDecimal.setScale()。如果适用于您的情况,则无需XmlAdapter。
BigDecimal bd = new BigDecimal((double) 1.2345);
bd = bd.setScale(2, RoundingMode.HALF_UP);
答案 1 :(得分:1)
您可以使用XmlAdapter
执行此操作。下面是一个类似的例子,展示了Joda-Time类的概念: