繁体   English   中英

JAVA JAXB enum int value 而不是 enum name

[英]JAVA JAXB enum int value instead of enum name

我对 jaxb 和编组到 xml 有问题。 我有这个 xsd:

<xs:simpleType name="PointType">
    <xs:restriction base="xs:int">
        <xs:enumeration value="0"/>
        <xs:enumeration value="1"/>
        <xs:enumeration value="2"/>
        <xs:enumeration value="3"/>
        <xs:enumeration value="4"/>
        <xs:enumeration value="5"/>
        <xs:enumeration value="6"/>
        <xs:enumeration value="7"/>
        <xs:enumeration value="8"/>
        <xs:enumeration value="9"/>
        <xs:enumeration value="10"/>
        <xs:enumeration value="11"/>
    </xs:restriction>
</xs:simpleType>

这个xjc:

 <jxb:bindings schemaLocation="../xsd/test.xsd">
    <jxb:bindings node="//xs:simpleType[@name='PointType']">
        <jxb:typesafeEnumClass/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='0']">
        <jxb:typesafeEnumMember name="STOP"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='1']">
        <jxb:typesafeEnumMember name="ADDRESS"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='2']">
        <jxb:typesafeEnumMember name="POI"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='3']">
        <jxb:typesafeEnumMember name="GEO_COORDINATE"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='4']">
        <jxb:typesafeEnumMember name="UNKNOWN"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='5']">
        <jxb:typesafeEnumMember name="ALIAS"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='6']">
        <jxb:typesafeEnumMember name="CAR_SHARING"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='7']">
        <jxb:typesafeEnumMember name="TAXI"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='8']">
        <jxb:typesafeEnumMember name="CAR_RENTAL"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='9']">
        <jxb:typesafeEnumMember name="TARIFF_POINT"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='10']">
        <jxb:typesafeEnumMember name="UNUSED_10"/>
    </jxb:bindings>
    <jxb:bindings node="//xs:simpleType[@name='PointType']/xs:restriction/xs:enumeration[@value='11']">
        <jxb:typesafeEnumMember name="UNUSED_11"/>
    </jxb:bindings>

</jxb:bindings>

如果我使用 java 对象创建请求,我将创建一个 PointType.STOP 类型的点 object。

Point point = new Point();
point.setPointId(pointId);
point.setType(PointType.STOP);

在生成的 xml 中,类型是 'STOP' 而不是数值。

{"pointVerification":{"point" 
{"pointId":null,"type":"STOP","name":"Test","region":null,

该类型应填充 0 值而不是 enum 的名称。 谁能帮我?

您可以通过在enum上使用@XmlEnum注释以及每个常量的@XmlEnumValue来做到这一点:

@XmlEnum(Integer.class)
public enum PointType {
    @XmlEnumValue("0") STOP,
    @XmlEnumValue("1") ADDRESS,
    @XmlEnumValue("2") POI,
    @XmlEnumValue("3") GEO_COORDINATE
    // etc.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM